我是一名正在学习如何使用Pytest(以及单元测试)的人,我想编写一个测试来检查同一类的两个对象是否具有相同的属性。
例如:
class Something(object):
def __init__(self, a, b):
self.a, self.b = a, b
def __repr__(self):
return 'Something(a={}, b={})'.format(self.a, self.b)
def test_equality():
obj1 = Something(1, 2)
obj2 = Something(1, 2)
assert obj1.a == obj2.a
assert obj1 == obj2
这个测试在第三个断言失败并抛出了 AssertionError 异常:
def test_equality():
obj1 = Something(1, 2)
obj2 = Something(1, 2)
assert obj1.a == obj2.a
assert obj1.b == obj2.b
> assert obj1 == obj2
E assert Something(a=1, b=2) == Something(a=1, b=2)
tests/test_model.py:13: AssertionError
在Python或Pytest中,只使用assert obj1 == obj2
是可行的吗?我是否应该为每个要测试的类实现“丰富比较”方法,或者有更简单的方法?
__eq__
,因为有些对象即使字段不同也可能相等。一种丑陋的方法通常可以奏效,如果 (a) 属性本身是可比较的,且 (b) 所有属性都存储在字典中,则可以使用type(obj1) == type(obj2) and obj1.__dict__ == obj2.__dict__
,但这种方法非常有限。 - Willem Van Onsem