unittest.TestCase.assertDictEqual and assertMultilineEqual provide better default failure messages in the event of long diffs.

This commit is contained in:
Michael Foord 2010-06-05 12:58:39 +00:00
parent 77acee9567
commit 674648e3f2
2 changed files with 12 additions and 6 deletions

View file

@ -800,10 +800,11 @@ class TestCase(object):
self.assert_(isinstance(d2, dict), 'Second argument is not a dictionary')
if d1 != d2:
standardMsg = '%s != %s' % (safe_repr(d1, True), safe_repr(d2, True))
diff = ('\n' + '\n'.join(difflib.ndiff(
pprint.pformat(d1).splitlines(),
pprint.pformat(d2).splitlines())))
standardMsg = self._truncateMessage('', diff)
standardMsg = self._truncateMessage(standardMsg, diff)
self.fail(self._formatMessage(msg, standardMsg))
def assertDictContainsSubset(self, expected, actual, msg=None):
@ -886,9 +887,10 @@ class TestCase(object):
'Second argument is not a string'))
if first != second:
standardMsg = '%s != %s' % (safe_repr(d1, True), safe_repr(d2, True))
diff = '\n' + ''.join(difflib.ndiff(first.splitlines(True),
second.splitlines(True)))
standardMsg = self._truncateMessage('', diff)
standardMsg = self._truncateMessage(standardMsg, diff)
self.fail(self._formatMessage(msg, standardMsg))
def assertLess(self, a, b, msg=None):