summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2018-07-12 00:14:24 -0400
committerTim Graham <timograham@gmail.com>2019-01-10 19:11:21 -0500
commit41e73de39df31c4b13d65462bfeedde6924226d8 (patch)
treea5842ddf1de35a51e54ffb3c5515bd89310c988f /tests
parent8c775391b78b2a4a2b57c5e89ed4888f36aada4b (diff)
Fixed #28478 -- Make DiscoverRunner skip creating unused test databases.
SimpleTestCase.databases makes it possible to determine the set of databases required to run the discovered tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_runner/test_discover_runner.py45
-rw-r--r--tests/test_runner_apps/databases/__init__.py0
-rw-r--r--tests/test_runner_apps/databases/tests.py18
3 files changed, 63 insertions, 0 deletions
diff --git a/tests/test_runner/test_discover_runner.py b/tests/test_runner/test_discover_runner.py
index d7569fc111..caa48a852d 100644
--- a/tests/test_runner/test_discover_runner.py
+++ b/tests/test_runner/test_discover_runner.py
@@ -3,6 +3,7 @@ from argparse import ArgumentParser
from contextlib import contextmanager
from unittest import TestSuite, TextTestRunner, defaultTestLoader
+from django.db import connections
from django.test import SimpleTestCase
from django.test.runner import DiscoverRunner
from django.test.utils import captured_stdout
@@ -223,3 +224,47 @@ class DiscoverRunnerTests(SimpleTestCase):
with captured_stdout() as stdout:
runner.build_suite(['test_runner_apps.tagged.tests'])
self.assertIn('Excluding test tag(s): bar, foo.\n', stdout.getvalue())
+
+
+class DiscoverRunnerGetDatabasesTests(SimpleTestCase):
+ runner = DiscoverRunner(verbosity=2)
+ skip_msg = 'Skipping setup of unused database(s): '
+
+ def get_databases(self, test_labels):
+ suite = self.runner.build_suite(test_labels)
+ with captured_stdout() as stdout:
+ databases = self.runner.get_databases(suite)
+ return databases, stdout.getvalue()
+
+ def test_mixed(self):
+ databases, output = self.get_databases(['test_runner_apps.databases.tests'])
+ self.assertEqual(databases, set(connections))
+ self.assertNotIn(self.skip_msg, output)
+
+ def test_all(self):
+ databases, output = self.get_databases(['test_runner_apps.databases.tests.AllDatabasesTests'])
+ self.assertEqual(databases, set(connections))
+ self.assertNotIn(self.skip_msg, output)
+
+ def test_default_and_other(self):
+ databases, output = self.get_databases([
+ 'test_runner_apps.databases.tests.DefaultDatabaseTests',
+ 'test_runner_apps.databases.tests.OtherDatabaseTests',
+ ])
+ self.assertEqual(databases, set(connections))
+ self.assertNotIn(self.skip_msg, output)
+
+ def test_default_only(self):
+ databases, output = self.get_databases(['test_runner_apps.databases.tests.DefaultDatabaseTests'])
+ self.assertEqual(databases, {'default'})
+ self.assertIn(self.skip_msg + 'other', output)
+
+ def test_other_only(self):
+ databases, output = self.get_databases(['test_runner_apps.databases.tests.OtherDatabaseTests'])
+ self.assertEqual(databases, {'other'})
+ self.assertIn(self.skip_msg + 'default', output)
+
+ def test_no_databases_required(self):
+ databases, output = self.get_databases(['test_runner_apps.databases.tests.NoDatabaseTests'])
+ self.assertEqual(databases, set())
+ self.assertIn(self.skip_msg + 'default, other', output)
diff --git a/tests/test_runner_apps/databases/__init__.py b/tests/test_runner_apps/databases/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/test_runner_apps/databases/__init__.py
diff --git a/tests/test_runner_apps/databases/tests.py b/tests/test_runner_apps/databases/tests.py
new file mode 100644
index 0000000000..4be260e689
--- /dev/null
+++ b/tests/test_runner_apps/databases/tests.py
@@ -0,0 +1,18 @@
+import unittest
+
+
+class NoDatabaseTests(unittest.TestCase):
+ def test_nothing(self):
+ pass
+
+
+class DefaultDatabaseTests(NoDatabaseTests):
+ databases = {'default'}
+
+
+class OtherDatabaseTests(NoDatabaseTests):
+ databases = {'other'}
+
+
+class AllDatabasesTests(NoDatabaseTests):
+ databases = '__all__'