Passing the ``-v`` option to your test script will instruct :func:`unittest.main`
to enable a higher level of verbosity, and produce the following output::
- test_isupper (__main__.TestStringMethods) ... ok
- test_split (__main__.TestStringMethods) ... ok
- test_upper (__main__.TestStringMethods) ... ok
+ test_isupper (__main__.TestStringMethods.test_isupper) ... ok
+ test_split (__main__.TestStringMethods.test_split) ... ok
+ test_upper (__main__.TestStringMethods.test_upper) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.001s
This is the output of running the example above in verbose mode::
- test_format (__main__.MyTestCase) ... skipped 'not supported in this library version'
- test_nothing (__main__.MyTestCase) ... skipped 'demonstrating skipping'
- test_maybe_skipped (__main__.MyTestCase) ... skipped 'external resource not available'
- test_windows_support (__main__.MyTestCase) ... skipped 'requires Windows'
+ test_format (__main__.MyTestCase.test_format) ... skipped 'not supported in this library version'
+ test_nothing (__main__.MyTestCase.test_nothing) ... skipped 'demonstrating skipping'
+ test_maybe_skipped (__main__.MyTestCase.test_maybe_skipped) ... skipped 'external resource not available'
+ test_windows_support (__main__.MyTestCase.test_windows_support) ... skipped 'requires Windows'
----------------------------------------------------------------------
Ran 4 tests in 0.005s
will produce the following output::
======================================================================
- FAIL: test_even (__main__.NumbersTest) (i=1)
+ FAIL: test_even (__main__.NumbersTest.test_even) (i=1)
+ Test that numbers between 0 and 5 are all even.
----------------------------------------------------------------------
Traceback (most recent call last):
- File "subtests.py", line 32, in test_even
+ File "subtests.py", line 11, in test_even
self.assertEqual(i % 2, 0)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 1 != 0
======================================================================
- FAIL: test_even (__main__.NumbersTest) (i=3)
+ FAIL: test_even (__main__.NumbersTest.test_even) (i=3)
+ Test that numbers between 0 and 5 are all even.
----------------------------------------------------------------------
Traceback (most recent call last):
- File "subtests.py", line 32, in test_even
+ File "subtests.py", line 11, in test_even
self.assertEqual(i % 2, 0)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 1 != 0
======================================================================
- FAIL: test_even (__main__.NumbersTest) (i=5)
+ FAIL: test_even (__main__.NumbersTest.test_even) (i=5)
+ Test that numbers between 0 and 5 are all even.
----------------------------------------------------------------------
Traceback (most recent call last):
- File "subtests.py", line 32, in test_even
+ File "subtests.py", line 11, in test_even
self.assertEqual(i % 2, 0)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 1 != 0
Without using a subtest, execution would stop after the first failure,
wouldn't be displayed::
======================================================================
- FAIL: test_even (__main__.NumbersTest)
+ FAIL: test_even (__main__.NumbersTest.test_even)
----------------------------------------------------------------------
Traceback (most recent call last):
File "subtests.py", line 32, in test_even
self.assertEqual(
result.getDescription(self),
'testGetDescriptionWithoutDocstring (' + __name__ +
- '.Test_TextTestResult)')
+ '.Test_TextTestResult.testGetDescriptionWithoutDocstring)')
def testGetSubTestDescriptionWithoutDocstring(self):
with self.subTest(foo=1, bar=2):
self.assertEqual(
result.getDescription(self._subtest),
'testGetSubTestDescriptionWithoutDocstring (' + __name__ +
- '.Test_TextTestResult) (foo=1, bar=2)')
+ '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstring) (foo=1, bar=2)')
+
with self.subTest('some message'):
result = unittest.TextTestResult(None, True, 1)
self.assertEqual(
result.getDescription(self._subtest),
'testGetSubTestDescriptionWithoutDocstring (' + __name__ +
- '.Test_TextTestResult) [some message]')
+ '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstring) [some message]')
def testGetSubTestDescriptionWithoutDocstringAndParams(self):
with self.subTest():
self.assertEqual(
result.getDescription(self._subtest),
'testGetSubTestDescriptionWithoutDocstringAndParams '
- '(' + __name__ + '.Test_TextTestResult) (<subtest>)')
+ '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithoutDocstringAndParams) '
+ '(<subtest>)')
def testGetSubTestDescriptionForFalsyValues(self):
- expected = 'testGetSubTestDescriptionForFalsyValues (%s.Test_TextTestResult) [%s]'
+ expected = 'testGetSubTestDescriptionForFalsyValues (%s.Test_TextTestResult.testGetSubTestDescriptionForFalsyValues) [%s]'
result = unittest.TextTestResult(None, True, 1)
for arg in [0, None, []]:
with self.subTest(arg):
self.assertEqual(
result.getDescription(self._subtest),
'testGetNestedSubTestDescriptionWithoutDocstring '
- '(' + __name__ + '.Test_TextTestResult) (baz=2, bar=3, foo=1)')
+ '(' + __name__ + '.Test_TextTestResult.testGetNestedSubTestDescriptionWithoutDocstring) '
+ '(baz=2, bar=3, foo=1)')
def testGetDuplicatedNestedSubTestDescriptionWithoutDocstring(self):
with self.subTest(foo=1, bar=2):
self.assertEqual(
result.getDescription(self._subtest),
'testGetDuplicatedNestedSubTestDescriptionWithoutDocstring '
- '(' + __name__ + '.Test_TextTestResult) (baz=3, bar=4, foo=1)')
+ '(' + __name__ + '.Test_TextTestResult.testGetDuplicatedNestedSubTestDescriptionWithoutDocstring) (baz=3, bar=4, foo=1)')
@unittest.skipIf(sys.flags.optimize >= 2,
"Docstrings are omitted with -O2 and above")
self.assertEqual(
result.getDescription(self),
('testGetDescriptionWithOneLineDocstring '
- '(' + __name__ + '.Test_TextTestResult)\n'
+ '(' + __name__ + '.Test_TextTestResult.testGetDescriptionWithOneLineDocstring)\n'
'Tests getDescription() for a method with a docstring.'))
@unittest.skipIf(sys.flags.optimize >= 2,
self.assertEqual(
result.getDescription(self._subtest),
('testGetSubTestDescriptionWithOneLineDocstring '
- '(' + __name__ + '.Test_TextTestResult) (foo=1, bar=2)\n'
+ '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithOneLineDocstring) '
+ '(foo=1, bar=2)\n'
+
'Tests getDescription() for a method with a docstring.'))
@unittest.skipIf(sys.flags.optimize >= 2,
self.assertEqual(
result.getDescription(self),
('testGetDescriptionWithMultiLineDocstring '
- '(' + __name__ + '.Test_TextTestResult)\n'
+ '(' + __name__ + '.Test_TextTestResult.testGetDescriptionWithMultiLineDocstring)\n'
'Tests getDescription() for a method with a longer '
'docstring.'))
self.assertEqual(
result.getDescription(self._subtest),
('testGetSubTestDescriptionWithMultiLineDocstring '
- '(' + __name__ + '.Test_TextTestResult) (foo=1, bar=2)\n'
+ '(' + __name__ + '.Test_TextTestResult.testGetSubTestDescriptionWithMultiLineDocstring) '
+ '(foo=1, bar=2)\n'
'Tests getDescription() for a method with a longer '
'docstring.'))
def testLongOutput(self):
classname = f'{__name__}.{self.Test.__qualname__}'
self.assertEqual(self._run_test('testSuccess', 2),
- f'testSuccess ({classname}) ... ok\n')
+ f'testSuccess ({classname}.testSuccess) ... ok\n')
self.assertEqual(self._run_test('testSkip', 2),
- f"testSkip ({classname}) ... skipped 'skip'\n")
+ f"testSkip ({classname}.testSkip) ... skipped 'skip'\n")
self.assertEqual(self._run_test('testFail', 2),
- f'testFail ({classname}) ... FAIL\n')
+ f'testFail ({classname}.testFail) ... FAIL\n')
self.assertEqual(self._run_test('testError', 2),
- f'testError ({classname}) ... ERROR\n')
+ f'testError ({classname}.testError) ... ERROR\n')
self.assertEqual(self._run_test('testExpectedFailure', 2),
- f'testExpectedFailure ({classname}) ... expected failure\n')
+ f'testExpectedFailure ({classname}.testExpectedFailure) ... expected failure\n')
self.assertEqual(self._run_test('testUnexpectedSuccess', 2),
- f'testUnexpectedSuccess ({classname}) ... unexpected success\n')
+ f'testUnexpectedSuccess ({classname}.testUnexpectedSuccess) ... unexpected success\n')
def testDotsOutputSubTestSuccess(self):
self.assertEqual(self._run_test('testSubTestSuccess', 1), '.')
def testLongOutputSubTestSuccess(self):
classname = f'{__name__}.{self.Test.__qualname__}'
self.assertEqual(self._run_test('testSubTestSuccess', 2),
- f'testSubTestSuccess ({classname}) ... ok\n')
+ f'testSubTestSuccess ({classname}.testSubTestSuccess) ... ok\n')
def testDotsOutputSubTestMixed(self):
self.assertEqual(self._run_test('testSubTestMixed', 1), 'sFE')
def testLongOutputSubTestMixed(self):
classname = f'{__name__}.{self.Test.__qualname__}'
self.assertEqual(self._run_test('testSubTestMixed', 2),
- f'testSubTestMixed ({classname}) ... \n'
- f" testSubTestMixed ({classname}) [skip] (b=2) ... skipped 'skip'\n"
- f' testSubTestMixed ({classname}) [fail] (c=3) ... FAIL\n'
- f' testSubTestMixed ({classname}) [error] (d=4) ... ERROR\n')
+ f'testSubTestMixed ({classname}.testSubTestMixed) ... \n'
+ f" testSubTestMixed ({classname}.testSubTestMixed) [skip] (b=2) ... skipped 'skip'\n"
+ f' testSubTestMixed ({classname}.testSubTestMixed) [fail] (c=3) ... FAIL\n'
+ f' testSubTestMixed ({classname}.testSubTestMixed) [error] (d=4) ... ERROR\n')
def testDotsOutputTearDownFail(self):
out = self._run_test('testSuccess', 1, AssertionError('fail'))
classname = f'{__name__}.{self.Test.__qualname__}'
out = self._run_test('testSuccess', 2, AssertionError('fail'))
self.assertEqual(out,
- f'testSuccess ({classname}) ... FAIL\n')
+ f'testSuccess ({classname}.testSuccess) ... FAIL\n')
out = self._run_test('testError', 2, AssertionError('fail'))
self.assertEqual(out,
- f'testError ({classname}) ... ERROR\n'
- f'testError ({classname}) ... FAIL\n')
+ f'testError ({classname}.testError) ... ERROR\n'
+ f'testError ({classname}.testError) ... FAIL\n')
out = self._run_test('testFail', 2, Exception('error'))
self.assertEqual(out,
- f'testFail ({classname}) ... FAIL\n'
- f'testFail ({classname}) ... ERROR\n')
+ f'testFail ({classname}.testFail) ... FAIL\n'
+ f'testFail ({classname}.testFail) ... ERROR\n')
out = self._run_test('testSkip', 2, AssertionError('fail'))
self.assertEqual(out,
- f"testSkip ({classname}) ... skipped 'skip'\n"
- f'testSkip ({classname}) ... FAIL\n')
+ f"testSkip ({classname}.testSkip) ... skipped 'skip'\n"
+ f'testSkip ({classname}.testSkip) ... FAIL\n')
classDict = dict(unittest.TestResult.__dict__)
expected_out = '\nStdout:\nset up\n'
self.assertEqual(stdout.getvalue(), expected_out)
self.assertEqual(len(result.errors), 1)
- description = f'test_foo ({strclass(Foo)})'
+ description = f'test_foo ({strclass(Foo)}.test_foo)'
test_case, formatted_exc = result.errors[0]
self.assertEqual(str(test_case), description)
self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
expected_out = '\nStdout:\ntear down\n'
self.assertEqual(stdout.getvalue(), expected_out)
self.assertEqual(len(result.errors), 1)
- description = f'test_foo ({strclass(Foo)})'
+ description = f'test_foo ({strclass(Foo)}.test_foo)'
test_case, formatted_exc = result.errors[0]
self.assertEqual(str(test_case), description)
self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
expected_out = '\nStdout:\nset up\ndo cleanup2\ndo cleanup1\n'
self.assertEqual(stdout.getvalue(), expected_out)
self.assertEqual(len(result.errors), 2)
- description = f'test_foo ({strclass(Foo)})'
+ description = f'test_foo ({strclass(Foo)}.test_foo)'
test_case, formatted_exc = result.errors[0]
self.assertEqual(str(test_case), description)
self.assertIn('ValueError: bad cleanup2', formatted_exc)
expected_out = '\nStdout:\nset up\ndo cleanup2\ndo cleanup1\n'
self.assertEqual(stdout.getvalue(), expected_out)
self.assertEqual(len(result.errors), 3)
- description = f'test_foo ({strclass(Foo)})'
+ description = f'test_foo ({strclass(Foo)}.test_foo)'
test_case, formatted_exc = result.errors[0]
self.assertEqual(str(test_case), description)
self.assertIn('ZeroDivisionError: division by zero', formatted_exc)
expected_out = '\nStdout:\nset up\ntear down\ndo cleanup2\ndo cleanup1\n'
self.assertEqual(stdout.getvalue(), expected_out)
self.assertEqual(len(result.errors), 3)
- description = f'test_foo ({strclass(Foo)})'
+ description = f'test_foo ({strclass(Foo)}.test_foo)'
test_case, formatted_exc = result.errors[0]
self.assertEqual(str(test_case), description)
self.assertIn('ZeroDivisionError: division by zero', formatted_exc)