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中的所有实例之间共享?