Usage of specific test methods like TestCase.assertEqual(x,y)
instead of assert x == y
can result in more clear reporting of what is wrong.
For example, consider:
from unittest import TestCase
class AssertApproachesTests(TestCase):
def test_plain_assert(self):
assert {"key": "value"} == {"key": "valuesss"}
def test_rich_assert(self):
self.assertEqual({"key": "value"}, {"key": "valuesss"})
Running the tests (in this case, using pytest
) gives:
$ pytest api -k "_assert"
======================== FAILURES =========================
_________ AssertApproachesTests.test_plain_assert _________
self = <api.tests.test_asserts.AssertApproachesTests testMethod=test_plain_assert>
def test_plain_assert(self):
> assert {"key": "value"} == {"key": "valuesss"}
E AssertionError: assert {'key': 'value'} == {'key': 'valuesss'}
E Differing items:
E {'key': 'value'} != {'key': 'valuesss'}
E Use -v to get more diff
api/tests/test_asserts.py:5: AssertionError
_________ AssertApproachesTests.test_rich_assert __________
self = <api.tests.test_asserts.AssertApproachesTests testMethod=test_rich_assert>
def test_rich_assert(self):
> self.assertEqual({"key": "value"}, {"key": "valuesss"})
E AssertionError: {'key': 'value'} != {'key': 'valuesss'}
E - {'key': 'value'}
E + {'key': 'valuesss'}
E ? +++
api/tests/test_asserts.py:8: AssertionError
Notice the "+++" in the latter output, showing what actually differs.