@@ -105,6 +105,10 @@ def list_cases(tests: TestTuple, *,
105105 print (count (len (skipped ), "test" ), "skipped:" , file = stderr )
106106 printlist (skipped , file = stderr )
107107
108+ class _ModuleLoadFailed (Exception ):
109+ """The test module failed to load; its test cases are unknown."""
110+
111+
108112def collect_cases (tests : TestTuple , * ,
109113 match_tests : TestFilter | None = None ,
110114 test_dir : StrPath | None = None
@@ -124,16 +128,23 @@ def collect_cases(tests: TestTuple, *,
124128 except unittest .SkipTest :
125129 skipped .append (test_name )
126130 continue
131+ except _ModuleLoadFailed :
132+ # The module failed to load. Run it as a whole, so that the
133+ # error is reported as in the normal mode.
134+ result [test_name ] = [test_name ]
135+ continue
127136 if cases :
128137 result [test_name ] = cases
129138 return result , skipped
130139
131140def _collect_cases (suite : unittest .TestSuite , out : list [str ]) -> None :
132141 for test in suite :
133- if isinstance (test , unittest .loader ._FailedTest ): # type: ignore[attr-defined]
134- continue
135142 if isinstance (test , unittest .TestSuite ):
136143 _collect_cases (test , out )
144+ elif isinstance (test , unittest .loader ._FailedTest ): # type: ignore[attr-defined]
145+ # The test module failed to load. Its test cases are
146+ # unknown: let the caller run the whole module.
147+ raise _ModuleLoadFailed
137148 elif isinstance (test , unittest .TestCase ):
138149 if match_test (test ):
139150 out .append (test .id ())
0 commit comments