2016-05-12 6 views
2

Когда я использую assertEqual() с двумя словарями РЕПЛИ, он показывает мне диф, например:Как выводить полные различия в модульных тестах Django?

>>> import unittest 
>>> class A(unittest.TestCase): 
... pass 
... 
>>> a = A() 
>>> d1 = dict(zip(range(10), range(1000000, 1000010))) 
>>> d2 = dict(zip(range(3, 13), range(1000003, 1000013))) 
>>> a.assertEqual(d1, d2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3.5/unittest/case.py", line 820, in assertEqual 
    assertion_func(first, second, msg=msg) 
    File "/usr/lib/python3.5/unittest/case.py", line 1111, in assertDictEqual 
    self.fail(self._formatMessage(msg, standardMsg)) 
    File "/usr/lib/python3.5/unittest/case.py", line 665, in fail 
    raise self.failureException(msg) 
AssertionError: {0: 1000000, 1: 1000001, 2: 1000002, 3: 10[73 chars]0009} != {3: 1000003, 4: 1000004, 5: 1000005, 6: 10[76 chars]0012} 
- {0: 1000000, 
- 1: 1000001, 
- 2: 1000002, 
- 3: 1000003, 
?^

+ {3: 1000003, 
?^

    4: 1000004, 
    5: 1000005, 
    6: 1000006, 
    7: 1000007, 
    8: 1000008, 
- 9: 1000009} 
?   ^

+ 9: 1000009, 
?   ^

+ 10: 1000010, 
+ 11: 1000011, 
+ 12: 1000012} 

Когда я сделать то же самое в тесте Джанго единицы, иногда печатает диф, а иногда только первым укорачиваются линия , Интересно, как я могу заставить его всегда печатать diff.
Я запускаю тесты Django с ./manage.py test -v 3.

ответ

3

Если вы установили maxDiff в None, тогда будет показан полный разброс.

class A(unittest.TestCase): 
    maxDiff = None 
    ... 
+0

Я никогда попытался установить это на уровне класса и экземпляра, до сих пор нет различий :( – planetp

+0

Убедитесь, что вы капитализация правильно. Кроме того, я боюсь, что у меня нет никаких идей, почему это не будет работать. – Alasdair