关于单元测试:python unittest和对象初始化

Python Unittest and object initialization

我的python版本是3.5.1

我有一个简单的代码(tests.py):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import unittest

class SimpleObject(object):
    array = []

class SimpleTestCase(unittest.TestCase):

    def test_first(self):
        simple_object = SimpleObject()
        simple_object.array.append(1)

        self.assertEqual(len(simple_object.array), 1)

    def test_second(self):
        simple_object = SimpleObject()
        simple_object.array.append(1)

        self.assertEqual(len(simple_object.array), 1)

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

如果我用命令'python tests.py'运行它,我将得到结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
.F
======================================================================
FAIL: test_second (__main__.SimpleTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File"tests.py", line 105, in test_second
    self.assertEqual(len(simple_object.array), 1)
AssertionError: 2 != 1

----------------------------------------------------------------------
Ran 2 tests in 0.003s

FAILED (failures=1)

为什么会这样?以及如何修复它。我希望每个运行的测试都是独立的(每个测试都应该通过),但这并不像我们看到的那样。


数组由类的所有实例共享。如果希望数组对实例是唯一的,则需要将其放入类初始值设定项中:

1
2
3
class SimpleObject(object):
    def __init__(self):
        self.array = []

有关更多信息,请看这个问题:类变量在Python中的所有实例之间共享?