Coverage for src/zapy/test/test_runner.py: 100%
24 statements
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-10 19:35 +0000
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-10 19:35 +0000
1import unittest
2import unittest.case
3from typing import Any, List
4from unittest.runner import TextTestResult
6from .models import TestResult as TestResultModel
9class TestResult(TextTestResult):
10 def __init__(self, *args: Any, **kwargs: Any) -> None:
11 super().__init__(*args, **kwargs)
12 self.successes: list[Any] = []
14 def addSuccess(self, test: Any) -> None: # noqa: N802
15 super().addSuccess(test)
16 self.successes.append(test)
18 def as_list(self) -> List[TestResultModel]:
19 successes = [
20 TestResultModel(
21 method=test._testMethodName,
22 status="success",
23 )
24 for test in self.successes
25 ]
26 errors = [
27 TestResultModel(
28 method=test._testMethodName,
29 traceback=traceback_str,
30 status="error",
31 )
32 for test, traceback_str in self.errors
33 ]
34 failures = [
35 TestResultModel(
36 method=test._testMethodName,
37 traceback=traceback_str,
38 status="failure",
39 )
40 for test, traceback_str in self.failures
41 ]
42 return successes + errors + failures
45def run_tests(*test_classes: type[unittest.TestCase]) -> TestResult:
46 loader = unittest.TestLoader()
47 suites_list = (loader.loadTestsFromTestCase(test_class) for test_class in test_classes)
48 test_suit = unittest.TestSuite(suites_list)
50 test_runner = unittest.runner.TextTestRunner(resultclass=TestResult)
51 test_result = test_runner.run(test_suit)
53 return test_result # type: ignore