2008-09-16 89 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会以不同的顺序调用。