2012-05-17 129 views
1

我有兩個單元測試文件,第二個文件的測試擴展並覆蓋了第一個文件的一些測試。只運行特定文件的測試

用一個非常簡單的例子來說明。有tests1.py

import unittest 

class A(unittest.TestCase): 
    def setUp(self): 
     print "setup stuff A" 

    def test_stuff(self): 
     print "test stuff A" 

if __name__ == "__main__": 
    unittest.main() 

而且tests2.py

import unittest 
from tests1 import A 

class B(A): 
    def setUp(self): 
     print "setup stuff B" 

    def test_stuff(self): 
     print "test stuff B" 

if __name__ == "__main__": 
    unittest.main() 

我希望能夠獨立運行的每個文件,或運行整套文件的一個批次。我不想手動創建不同的套件,其中我必須手動指定要運行的一組測試...

但是...對於上面的示例,當我運行python tests2.py時,測試的tests1.py也跑了!當我一次全部運行它們時,它們會跑兩次。我知道這是因爲我從tests2.py導入A。我怎樣才能避免這種情況?我應該遵循這個最佳做法嗎?

我實際上是從PyCharm運行測試,但我想這可能不相關,因爲我可以從命令行重現運行測試的相同問題。

回答

2

拆分出公共代碼到另一個類不從unittest.TestCase繼承:

class Parent(object): 
    pass # common stuff goes here 

class A(Parent, unittest.TestCase): 
    pass # A stuff here 

class B(Parent, unittest.TestCase): 
    pass # B stuff here 
+0

可行的,即使不理想......一樣會有針對每對一個新的''Parent''類類「A」和「B」。我需要共享測試實現幾十個例子,所以會有很多新類 –

+0

我已經編輯了你的例子,以便在''A''和''B''中我們可以覆蓋setUp() ''Parent''。否則,在調用super()時調用TestCase.setUp(),而不是預期的Parent.setUp() –

相關問題