test_discover_runner.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from contextlib import contextmanager
  2. import os
  3. import sys
  4. from unittest import expectedFailure
  5. from django.test import TestCase
  6. from django.test.runner import DiscoverRunner
  7. try:
  8. import unittest2
  9. except ImportError:
  10. unittest2 = None
  11. def expectedFailureIf(condition):
  12. """Marks a test as an expected failure if ``condition`` is met."""
  13. if condition:
  14. return expectedFailure
  15. return lambda func: func
  16. class DiscoverRunnerTest(TestCase):
  17. def test_dotted_test_module(self):
  18. count = DiscoverRunner().build_suite(
  19. ["test_discovery_sample.tests_sample"],
  20. ).countTestCases()
  21. self.assertEqual(count, 3)
  22. def test_dotted_test_class_vanilla_unittest(self):
  23. count = DiscoverRunner().build_suite(
  24. ["test_discovery_sample.tests_sample.TestVanillaUnittest"],
  25. ).countTestCases()
  26. self.assertEqual(count, 1)
  27. def test_dotted_test_class_unittest2(self):
  28. count = DiscoverRunner().build_suite(
  29. ["test_discovery_sample.tests_sample.TestUnittest2"],
  30. ).countTestCases()
  31. self.assertEqual(count, 1)
  32. def test_dotted_test_class_django_testcase(self):
  33. count = DiscoverRunner().build_suite(
  34. ["test_discovery_sample.tests_sample.TestDjangoTestCase"],
  35. ).countTestCases()
  36. self.assertEqual(count, 1)
  37. # this test fails if unittest2 is installed from PyPI on Python 2.6
  38. # refs https://code.djangoproject.com/ticket/20437
  39. @expectedFailureIf(sys.version_info < (2, 7) and unittest2)
  40. def test_dotted_test_method_vanilla_unittest(self):
  41. count = DiscoverRunner().build_suite(
  42. ["test_discovery_sample.tests_sample.TestVanillaUnittest.test_sample"],
  43. ).countTestCases()
  44. self.assertEqual(count, 1)
  45. def test_dotted_test_method_unittest2(self):
  46. count = DiscoverRunner().build_suite(
  47. ["test_discovery_sample.tests_sample.TestUnittest2.test_sample"],
  48. ).countTestCases()
  49. self.assertEqual(count, 1)
  50. def test_dotted_test_method_django_testcase(self):
  51. count = DiscoverRunner().build_suite(
  52. ["test_discovery_sample.tests_sample.TestDjangoTestCase.test_sample"],
  53. ).countTestCases()
  54. self.assertEqual(count, 1)
  55. def test_pattern(self):
  56. count = DiscoverRunner(
  57. pattern="*_tests.py",
  58. ).build_suite(["test_discovery_sample"]).countTestCases()
  59. self.assertEqual(count, 1)
  60. def test_file_path(self):
  61. @contextmanager
  62. def change_cwd_to_tests():
  63. """Change CWD to tests directory (one level up from this file)"""
  64. current_dir = os.path.abspath(os.path.dirname(__file__))
  65. tests_dir = os.path.join(current_dir, '..')
  66. old_cwd = os.getcwd()
  67. os.chdir(tests_dir)
  68. yield
  69. os.chdir(old_cwd)
  70. with change_cwd_to_tests():
  71. count = DiscoverRunner().build_suite(
  72. ["test_discovery_sample/"],
  73. ).countTestCases()
  74. self.assertEqual(count, 4)