Issue 15024: Split enhanced assertion support out as a unittest.TestCase base class (original) (raw)

The unittest module has some lovely enhanced comparison operations, but they're currently hard to access outside a test run.

It would be rather convenient if they were split out into a separate base class so they could be used directly without needing to create an actual test case.

Possible API:

class Assertions: # All the enhanced assertion machinery goes here # Nothing related to actually running test cases

class TestCase(Assertions): # This adds support for setUp, tearDown, addCleanup etc, etc

My current workaround is to just define a dummy "runTest" method in a subclass and use that:

class Assertions(unittest.TestCase): ... def runTest(self): pass ... check = Assertions() check.assertEqual([], ()) Traceback (most recent call last): File "", line 1, in File "/usr/lib64/python2.7/unittest/case.py", line 511, in assertEqual assertion_func(first, second, msg=msg) File "/usr/lib64/python2.7/unittest/case.py", line 504, in _baseAssertEqual raise self.failureException(msg) AssertionError: [] != () check.assertEqual([1], [2]) Traceback (most recent call last): File "", line 1, in File "/usr/lib64/python2.7/unittest/case.py", line 511, in assertEqual assertion_func(first, second, msg=msg) File "/usr/lib64/python2.7/unittest/case.py", line 740, in assertListEqual self.assertSequenceEqual(list1, list2, msg, seq_type=list) File "/usr/lib64/python2.7/unittest/case.py", line 722, in assertSequenceEqual self.fail(msg) File "/usr/lib64/python2.7/unittest/case.py", line 408, in fail raise self.failureException(msg) AssertionError: Lists differ: [1] != [2]

First differing element 0: 1 2

Why not just instantiate a TestCase instance and use that?

from unittest import TestCase t = TestCase() t.assertEqual('foo', 'bar') Traceback (most recent call last): File "", line 1, in File "/compile/py3k-cpython/Lib/unittest/case.py", line 642, in assertEqual assertion_func(first, second, msg=msg) File "/compile/py3k-cpython/Lib/unittest/case.py", line 1021, in assertMultiLineEqual self.fail(self._formatMessage(msg, standardMsg)) File "/compile/py3k-cpython/Lib/unittest/case.py", line 509, in fail raise self.failureException(msg) AssertionError: 'foo' != 'bar'