TestResult & TestOutcome
TestResult stores the results of running tests, including errors, failures,
and successes. You can inspect these results to generate reports or make decisions.
Inspecting TestResult
import unittest
class TestResultDemo(unittest.TestCase):
def test_pass(self):
self.assertTrue(True)
def test_fail(self):
self.assertEqual(1, 2)
def test_error(self):
raise ValueError("Something went wrong")
# Running and checking results
loader = unittest.TestLoader()
suite = loader.loadTestsFromTestCase(TestResultDemo)
result = unittest.TextTestRunner(verbosity=2).run(suite)
print(f"Tests run: {result.testsRun}")
print(f"Failures: {len(result.failures)}")
print(f"Errors: {len(result.errors)}")
print(f"Skipped: {len(result.skipped)}")
Accessing Failure Details
# result.failures contains (test, traceback_string) tuples
for test, traceback in result.failures:
print(f"FAILED: {test}")
print(traceback)
# result.errors contains (test, traceback_string) tuples
for test, traceback in result.errors:
print(f"ERROR: {test}")
print(traceback)
# result.skipped contains (test, reason) tuples
for test, reason in result.skipped:
print(f"SKIPPED: {test} - {reason}")
wasSuccessful()
result = unittest.TextTestRunner().run(suite)
if result.wasSuccessful():
print("All tests passed!")
else:
print(f"Failures: {len(result.failures)}")
print(f"Errors: {len(result.errors)}")
Key Takeaway
TestResult gives you structured access to test outcomes. Use it to build
custom reports, integrate with CI systems, or make pass/fail decisions in your workflow.