我的unittest报告失败(断言错误:列表不同),但它们似乎没有区别,为什么?

时间:2011-11-26 21:25:38

标签: python unit-testing

这是我的单位代码:

def testExtractObject(self):
    self.maxDiff = None
    objects = Script("compare.py").extractObjects()
    self.assertListEqual([Object('ClassA',2,5,None),
                    Object('ClassB',1,3,None),
                    Object('ClassC',0,2,None)], objects)

这是失败消息:

AssertionError: Lists differ: [Object(name='ClassA', meth... != [Object(name='ClassA', meth...

First differing element 0:
Object(name='ClassA', methods=2, lines=5, description=None)
Object(name='ClassA', methods=2, lines=5, description=None)

[Object(name='ClassA', methods=2, lines=5, description=None),
 Object(name='ClassB', methods=1, lines=3, description=None),
 Object(name='ClassC', methods=0, lines=2, description=None)]

我无法弄清楚这个消息之间的区别是什么,有人对此有所了解吗?

1 个答案:

答案 0 :(得分:2)

你必须告诉python如何确定两个对象是否相等。您可以通过向班级添加__eq__功能

来完成此操作
class SomeObject(object):
    def __eq__(self, other):
        return self.a == other.a and self.b == other.b

然后通过此测试的对象将被视为相等。默认情况下,对象的相等性测试是left is right,只有当它们是同一个对象时才是真的,而不是具有相同值的两个对象。