Fixed #23707 -- Prevented discovery of duplicated tests

This commit is contained in:
Claude Paroz 2014-10-23 20:15:41 +02:00
parent 92269b7b53
commit 2c9a03d487
2 changed files with 14 additions and 3 deletions

View File

@ -233,7 +233,7 @@ def reorder_suite(suite, classes):
def partition_suite(suite, classes, bins):
"""
Partitions a test suite by test type.
Partitions a test suite by test type. Also prevents duplicated tests.
classes is a sequence of types
bins is a sequence of TestSuites, one more than classes
@ -248,10 +248,12 @@ def partition_suite(suite, classes, bins):
else:
for i in range(len(classes)):
if isinstance(test, classes[i]):
bins[i].addTest(test)
if test not in bins[i]:
bins[i].addTest(test)
break
else:
bins[-1].addTest(test)
if test not in bins[-1]:
bins[-1].addTest(test)
def setup_databases(verbosity, interactive, keepdb=False, **kwargs):

View File

@ -117,6 +117,15 @@ class DiscoverRunnerTest(TestCase):
# All others can follow in unspecified order, including doctests
self.assertIn('DocTestCase', [t.__class__.__name__ for t in suite._tests[2:]])
def test_duplicates_ignored(self):
"""
Tests shouldn't be discovered twice when discovering on overlapping paths.
"""
single = DiscoverRunner().build_suite(["django.contrib.gis"]).countTestCases()
dups = DiscoverRunner().build_suite(
["django.contrib.gis", "django.contrib.gis.tests.geo3d"]).countTestCases()
self.assertEqual(single, dups)
def test_overrideable_test_suite(self):
self.assertEqual(DiscoverRunner().test_suite, TestSuite)