pytest_assertrepr_compare只会失败

时间:2017-03-23 18:42:22

标签: python unit-testing testing pytest

我是pytest的新人,正在研究如何自定义断言。即使我比较Foo(1)== Foo(1),来自pytest网站的这个例子也失败了。知道为什么吗?

http://docs.pytest.org/en/latest/assert.html#defining-your-own-assertion-comparison

配置:

# content of conftest.py
from test_foocompare import Foo
def pytest_assertrepr_compare(op, left, right):
    if isinstance(left, Foo) and isinstance(right, Foo) and op == "==":
        return ['Comparing Foo instances:',
                '   vals: %s != %s' % (left.val, right.val)]

测试:

# content of test_foocompare.py
class Foo:
    def __init__(self, val):
        self.val = val

    def __eq__(self, other):
        return self.val == other.val

def test_compare():
    f1 = Foo(1)
    f2 = Foo(1)
    assert f1 == f2

结果:

$ pytest -q test_foocompare.py
F
======= FAILURES ========
_______ test_compare ________

    def test_compare():
        f1 = Foo(1)
        f2 = Foo(1)
>       assert f1 == f2
E       assert Comparing Foo instances:
E            vals: 1 != 1

1 个答案:

答案 0 :(得分:0)

奇怪,你的测试通过我。它起初失败了,但我搞砸了__eq__()方法的缩进。检查您是否混淆了标签和空格等。

假设这不是您的问题,我建议您尝试使用Eclipse或PyCharm运行调试器。查看等式语句比较的值。如果您正在使用Emacs,则可以尝试安装我的live-py-mode以查看发生了什么。