Python的unittest逻辑

4 投票
5 回答
776 浏览
提问于 2025-04-11 09:15

有人能给我解释一下这个结果吗?第一个测试成功了,但第二个测试失败了,尽管在第一个测试中测试的变量已经改变了。

>>> 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 方法会在每个测试之前被调用。

撰写回答