--- you can reply above this line ---

New issue 279: Output on assertion failure of object comparisons could be better
https://bitbucket.org/hpk42/pytest/issue/279/output-on-assertion-failure-of-object

Brianna Laugher:

I 
[mentioned](http://mail.python.org/pipermail/pytest-dev/2013-March/002208.html) 
on pytest-dev that the output when tests fail from assertions around objects, 
especially lists/dicts/sets of objects, could be improved. In particular, 
comparisons appear with diff text which has ... "Skipping x identical leading 
characters in diff" (ie truncated) but there is no way to get the "full diff" - 
the truncated diff is usually fine when comparing strings directly but you need 
the full string to understand it properly when comparing, say, dicts.

[testfixtures.compare](http://mail.python.org/pipermail/pytest-dev/2013-March/002208.html)
 is more verbose, could be a useful starting point.

Here is an example that might be useful.


```
#!python

from collections import namedtuple
import datetime
from testfixtures import compare

TR = namedtuple('TR', 'start end')


def test_Foo():
    todayStart = datetime.datetime.today()
    todayEnd = todayStart + datetime.timedelta(hours=24)
    todayEndLater = todayEnd + datetime.timedelta(seconds=5)
    a = {frozenset('abc'): TR(todayStart, todayEndLater),
         frozenset('efg'): TR(todayStart, todayEnd)}
    b = {frozenset('abc'): TR(todayStart, todayEnd),
         frozenset('efg'): TR(todayStart, todayEnd)}
    compare(a, b)  
#    assert a == b
```

Native pytest output:


```
#!

>       assert a == b
E       assert {frozenset(['... 19, 456379))} == {frozenset(['a... 19, 456379))}
E         Skipping 121 identical leading characters in diff
E         Skipping 147 identical trailing characters in diff
E         - 1, 8, 35, 24, 456379)
E         ?           ^^
E         + 1, 8, 35, 19, 456379)
E         ?           ^^
```


testfixtures.compare output:


```
#!

>       compare(a, b)
../GFESuite-Builds/Release/release/lib/python2.7/site-packages/testfixtures/comparison.py:268:
 in compare
>       raise AssertionError(message)
E       AssertionError: dict not as expected:
E       
E       same:
E       [frozenset(['e', 'g', 'f'])]
E       
E       values differ:
E       frozenset(['a', 'c', 'b']): TR(start=datetime.datetime(2013, 3, 20, 8, 
35, 36, 430903), end=datetime.datetime(2013, 3, 21, 8, 35, 41, 430903)) != 
TR(start=datetime.datetime(2013, 3, 20, 8, 35, 36, 430903), 
end=datetime.datetime(2013, 3, 21, 8, 35, 36, 430903))
```

At least with the latter I have a clue about which key/value is causing the 
problem.

This is with pytest-2.2.3 but I don't think it's improved in 2.3.


--

This is an issue notification from bitbucket.org. You are receiving
this either because you are the owner of the issue, or you are
following the issue.
_______________________________________________
pytest-commit mailing list
pytest-commit@python.org
http://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to