Python的unittest逻辑
有人能给我解释一下这个结果吗?第一个测试成功了,但第二个测试失败了,尽管在第一个测试中测试的变量已经改变了。
>>> 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
5 个回答
0
如果我没记错的话,在那个测试框架里,setUp方法是在每个测试之前运行的。
11
来自 http://docs.python.org/lib/minimal-example.html :
当定义了一个 setUp() 方法时,测试运行器会在每个测试之前运行这个方法。
这就是说,setUp() 会在 testA 和 testB 之前都被执行,每次都把 i 设置为 1。在背后,其实每个测试都会重新创建一个新的测试对象,然后在执行测试之前,都会先运行 setUp() 方法。
9
每个测试都是用一个新的 MyTest 类的实例来运行的。这意味着如果你在一个测试中修改了 self,其他测试就不会受到影响,因为 self 会指向一个不同的实例。
另外,正如其他人提到的,setUp 方法会在每个测试之前被调用。