2
0
Эх сурвалжийг харах

Fixed #23707 -- Prevented discovery of duplicated tests

Claude Paroz 10 жил өмнө
parent
commit
2c9a03d487

+ 5 - 3
django/test/runner.py

@@ -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):

+ 9 - 0
tests/test_runner/test_discover_runner.py

@@ -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)