import unittest GLOBAL = [] def f(n): global GLOBAL GLOBAL.append(n) raise Exception class TestSubTestResult(unittest.TestResult): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.addSubTestCalls = [] def addSubTest(self, test, subtest, outcome): self.addSubTestCalls.append((subtest._message, list(GLOBAL))) class TestSubTest(unittest.TestCase): def runTest(self): class TestSubTestInner(unittest.TestCase): def runTest(self): with self.subTest('1'): f(1) with self.subTest('2'): f(2) result = TestSubTestInner().run(TestSubTestResult()) self.assertEqual( result.addSubTestCalls, [ ('1', [1]), ('2', [1, 2]), ], ) if __name__ == '__main__': unittest.main()