我遇到一个奇怪的问题,unittest如果从dict继承,则重用同一个类实例。
我的实际课程并非直接从dict
继承,而是从MutableMapping继承而且行为相同。
import unittest
class MyClass(dict):
pass
class TestMyClass(unittest.TestCase):
def test_myclass_1(self):
mc = MyClass()
print(id(mc))
def test_myclass_2(self):
mc = MyClass()
print(id(mc))
def test_myclass_3(self):
mc = MyClass()
print(id(mc))
def test_myclass_4(self):
mc = MyClass()
print(id(mc))
然后在运行时,我们可以看到重复使用相同的对象实例:
$ python3 -m unittest -v test.py
test_myclass_1 (test.TestMyClass) ... 140057337562040
ok
test_myclass_2 (test.TestMyClass) ... 140057337562128
ok
test_myclass_3 (test.TestMyClass) ... 140057337562040
ok
test_myclass_4 (test.TestMyClass) ... 140057337562128
ok
发生了什么事?
答案 0 :(得分:1)
来自id()的python 3文档:
返回对象的“标识”。这是一个整数,在该生命周期内保证该对象是唯一且恒定的。 具有非重叠生命周期的两个对象可能具有相同的id()值。
你的测试用例是一个接一个地执行的,这意味着MyClass的两个实例是非重叠的对象,如文档中所指出的,对于这种情况,id不能保证是唯一的。
祝你好运! :)