2008-09-16 97 views
3

有人可以向我解釋這個結果嗎?第一次測試成功,但第二次失敗,雖然測試變量在第一次測試中發生了變化。Python的單元測試邏輯

>>> class MyTest(unittest.TestCase): 
    def setUp(self): 
     self.i = 1 
    def testA(self): 
     self.i = 3 
     self.assertEqual(self.i, 3) 
    def testB(self): 
     self.assertEqual(self.i, 3) 


>>> unittest.main() 
.F 
====================================================================== 
FAIL: testB (__main__.MyTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "<pyshell#61>", line 8, in testB 
AssertionError: 1 != 3 

---------------------------------------------------------------------- 
Ran 2 tests in 0.016s 

回答

9

每個測試都使用MyTest類的新實例運行。這意味着如果你在一次測試中改變自我,那麼改變將不會延續到其他測試中,因爲自我會引用不同的實例。

另外,正如其他人所指出的,每次測試之前都會調用setUp。

0

如果我在該測試框架記錯設置方法每個試驗

11

之前運行從http://docs.python.org/lib/minimal-example.html

當設置()定義的方法,該 測試運行將在每次測試前運行該方法 。

所以setUp()在testA和testB之前運行,每次都將i設置爲1。在幕後,整個測試對象實際上是針對每個測試重新實例化的,在測試執行之前,每個新實例化都會運行setUp()。

-1

正如其他人所說的,setUp方法在您編寫的每種測試方法之前運行。所以,當testB運行時,i的值是1,而不是3.

您也可以使用每種測試方法後運行的tearDown方法。但是如果你的一個測試崩潰了,你的tearDown方法將永遠不會運行。

0

從方法論角度來看,單獨的測試應該是獨立的,否則會產生更難以發現的錯誤。想象一下,例如testA和testB會以不同的順序調用。