检查两个对象在 Pytest 中是否具有相同的内容

mal*_*0ir 4 python pytest

我正在学习如何使用 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
Run Code Online (Sandbox Code Playgroud)

此测试失败并在第三个断言中出现 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
Run Code Online (Sandbox Code Playgroud)

在 Python 或 Pytest 中可以只使用assert obj1 == obj2? 我应该为我想以这种方式测试的每个类实现“丰富的比较”方法还是有一些更简单的方法?

rpg*_*711 5

覆盖Something的__eq__函数。

def __eq__(self, other)
    if isinstance(self, other.__class__):
        return self.a == other.a and self.b == other.b
    return False
Run Code Online (Sandbox Code Playgroud)

还。

assert obj1 == obj2
Run Code Online (Sandbox Code Playgroud)

实际上是一个由两部分组成的语句。第一个是表达式 obj1 == obj2,它调用 obj1.__eq__(obj2) 并返回一个布尔值,第二个断言该布尔值为真。