2017-03-23 15 views
0

Ich bin neu bei pytest und schaute mir an, wie ich Assertions anpassen kann. Dieses Beispiel von pytests Website schlägt einfach fehl, auch wenn ich Foo (1) == Foo (1) vergleiche. Irgendeine Idee warum?pytest_assertrepr_compare schlägt nur fehl

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

Konfiguration:

# 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)] 

Test:

# 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 

Ergebnisse:

$ 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 

Antwort

0

Seltsam, Ihr Test für mich geht. Es versagte zuerst, aber ich hatte die Einrückung der __eq__() Methode versaut. Stellen Sie sicher, dass Tabulatoren und Leerzeichen nicht verwechselt wurden.

Angenommen, das ist nicht Ihr Problem, ich schlage vor, Sie versuchen, es mit einem Debugger ausführen, wenn Sie Eclipse oder PyCharm verwenden. Sehen Sie, welche Werte die Gleichheitsanweisung vergleicht. Wenn Sie Emacs verwenden, können Sie versuchen, meine live-py-mode zu installieren, um zu sehen, was passiert.