Overrided the default test command in order to enable manual overriding of the discover-runner settings.
Added options to customize the test loader and the order of test cases in the suite further on in the inheritance chain.
This commit is contained in:
parent
7ea74e3941
commit
d1ff6b023a
|
@ -0,0 +1,15 @@
|
||||||
|
from optparse import make_option
|
||||||
|
from django.core.management.commands.test import Command as TestCommand
|
||||||
|
|
||||||
|
class Command(TestCommand):
|
||||||
|
option_list = TestCommand.option_list + (
|
||||||
|
make_option('--root',
|
||||||
|
action='store', dest='test_discover_root', default=None,
|
||||||
|
help='Overrides the TEST_DISCOVER_ROOT setting.'),
|
||||||
|
make_option('--top-level',
|
||||||
|
action='store', dest='test_discover_top_level', default=None,
|
||||||
|
help='Overrides the TEST_TOP_LEVEL setting.'),
|
||||||
|
make_option('--pattern',
|
||||||
|
action='store', dest='test_discover_pattern', default=None,
|
||||||
|
help='Overrides the TEST_DISCOVER_PATTERN setting.'),
|
||||||
|
)
|
|
@ -1,8 +1,8 @@
|
||||||
from django.conf import settings
|
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from django.test.simple import DjangoTestSuiteRunner, reorder_suite
|
from django.test.simple import DjangoTestSuiteRunner, reorder_suite
|
||||||
from django.utils.importlib import import_module
|
from django.utils.importlib import import_module
|
||||||
|
from settings import TEST_DISCOVER_ROOT, TEST_DISCOVER_TOP_LEVEL, TEST_DISCOVER_PATTERN
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from django.utils.unittest import defaultTestLoader
|
from django.utils.unittest import defaultTestLoader
|
||||||
|
@ -16,30 +16,42 @@ except ImportError:
|
||||||
|
|
||||||
|
|
||||||
class DiscoverRunner(DjangoTestSuiteRunner):
|
class DiscoverRunner(DjangoTestSuiteRunner):
|
||||||
|
testLoader = defaultTestLoader
|
||||||
|
reorder_by = (TestCase,)
|
||||||
|
|
||||||
|
def __init__(self, test_discover_root=None, test_discover_top_level=None, test_discover_pattern=None, *args,
|
||||||
|
**kwargs):
|
||||||
|
self.test_discover_root = test_discover_root or TEST_DISCOVER_ROOT
|
||||||
|
self.test_discover_top_level = test_discover_top_level or TEST_DISCOVER_TOP_LEVEL
|
||||||
|
self.test_discover_pattern = test_discover_pattern or TEST_DISCOVER_PATTERN
|
||||||
|
|
||||||
|
super(DiscoverRunner, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
A test suite runner that uses unittest2 test discovery.
|
A test suite runner that uses unittest2 test discovery.
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def build_suite(self, test_labels, extra_tests=None, **kwargs):
|
|
||||||
|
def build_suite(self, test_labels, extra_tests=None):
|
||||||
suite = None
|
suite = None
|
||||||
root = getattr(settings, 'TEST_DISCOVER_ROOT', '.')
|
root = self.test_discover_root
|
||||||
top_level = getattr(settings, 'TEST_DISCOVER_TOP_LEVEL', None)
|
top_level = self.test_discover_top_level
|
||||||
pattern = getattr(settings, 'TEST_DISCOVER_PATTERN', 'test*.py')
|
pattern = self.test_discover_pattern
|
||||||
|
|
||||||
if test_labels:
|
if test_labels:
|
||||||
suite = defaultTestLoader.loadTestsFromNames(test_labels)
|
suite = self.testLoader.loadTestsFromNames(test_labels)
|
||||||
# if single named module has no tests, do discovery within it
|
# if single named module has no tests, do discovery within it
|
||||||
if not suite.countTestCases() and len(test_labels) == 1:
|
if not suite.countTestCases() and len(test_labels) == 1:
|
||||||
suite = None
|
suite = None
|
||||||
root = import_module(test_labels[0]).__path__[0]
|
root = import_module(test_labels[0]).__path__[0]
|
||||||
|
|
||||||
if suite is None:
|
if suite is None:
|
||||||
suite = defaultTestLoader.discover(root,
|
suite = self.testLoader.discover(root,
|
||||||
pattern=pattern, top_level_dir=top_level)
|
pattern=pattern, top_level_dir=top_level)
|
||||||
|
|
||||||
if extra_tests:
|
if extra_tests:
|
||||||
for test in extra_tests:
|
for test in extra_tests:
|
||||||
suite.addTest(test)
|
suite.addTest(test)
|
||||||
|
|
||||||
return reorder_suite(suite, (TestCase,))
|
return reorder_suite(suite, self.reorder_by)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
TEST_DISCOVER_ROOT = getattr(settings, 'TEST_DISCOVER_ROOT', '.')
|
||||||
|
TEST_DISCOVER_TOP_LEVEL = getattr(settings, 'TEST_DISCOVER_TOP_LEVEL', None)
|
||||||
|
TEST_DISCOVER_PATTERN = getattr(settings, 'TEST_DISCOVER_PATTERN', 'test*.py')
|
Loading…
Reference in New Issue