Skip to content

Commit 0f0fb3e

Browse files
committed
Ability to define custom test_runner for django test runner class
Move test_runner kwargs generation into separate method, like in django 1.11+ (still working in prior versions) Use `test_runner` attribute instead of hardcoded `xmlrunner.XMLTestRunner`
1 parent 6143f18 commit 0f0fb3e

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

xmlrunner/extra/djangotestrunner.py

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,47 @@
1717

1818

1919
class XMLTestRunner(DiscoverRunner):
20+
test_runner = xmlrunner.XMLTestRunner
2021

21-
def run_suite(self, suite, **kwargs):
22-
dummy = kwargs # unused
22+
def get_resultclass(self):
23+
# Django provides `DebugSQLTextTestResult` if `debug_sql` argument is True
24+
# To use `xmlrunner.result._XMLTestResult` we supress default behavior
25+
return None
26+
27+
def get_test_runner_kwargs(self):
28+
# We use separate verbosity setting for our runner
2329
verbosity = getattr(settings, 'TEST_OUTPUT_VERBOSE', 1)
24-
# XXX: verbosity = self.verbosity
2530
if isinstance(verbosity, bool):
2631
verbosity = (1, 2)[verbosity]
27-
descriptions = getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False)
32+
verbosity = verbosity # not self.verbosity
33+
2834
output_dir = getattr(settings, 'TEST_OUTPUT_DIR', '.')
2935
single_file = getattr(settings, 'TEST_OUTPUT_FILE_NAME', None)
3036

31-
kwargs = dict(
32-
verbosity=verbosity, descriptions=descriptions,
33-
failfast=self.failfast)
37+
# For single file case we are able to create file here
38+
# But for multiple files case files will be created inside runner/results
3439
if single_file is not None:
3540
if not os.path.exists(output_dir):
3641
os.makedirs(output_dir)
42+
43+
if single_file is None: # output is a stream
44+
output = output_dir
45+
else: # output is a folder
3746
file_path = os.path.join(output_dir, single_file)
38-
with open(file_path, 'wb') as xml:
39-
return xmlrunner.XMLTestRunner(
40-
output=xml, **kwargs).run(suite)
41-
else:
42-
return xmlrunner.XMLTestRunner(
43-
output=output_dir, **kwargs).run(suite)
47+
output = open(file_path, 'wb')
48+
49+
return dict(
50+
verbosity=verbosity,
51+
descriptions=getattr(settings, 'TEST_OUTPUT_DESCRIPTIONS', False),
52+
failfast=self.failfast,
53+
resultclass=self.get_resultclass(),
54+
output=output,
55+
)
56+
57+
def run_suite(self, suite, **kwargs):
58+
kwargs = self.get_test_runner_kwargs()
59+
runner = self.test_runner(**kwargs)
60+
results = runner.run(suite)
61+
if hasattr(kwargs['output'], 'close'):
62+
kwargs['output'].close()
63+
return results

0 commit comments

Comments
 (0)