Unittest重用从dict继承的类实例

时间:2017-06-16 20:56:13

标签: python python-unittest

我遇到一个奇怪的问题,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

发生了什么事?

1 个答案:

答案 0 :(得分:1)

来自id()的python 3文档:

  

返回对象的“标识”。这是一个整数,在该生命周期内保证该对象是唯一且恒定的。 具有非重叠生命周期的两个对象可能具有相同的id()值。

你的测试用例是一个接一个地执行的,这意味着MyClass的两个实例是非重叠的对象,如文档中所指出的,对于这种情况,id不能保证是唯一的。

祝你好运! :)