discover_tests.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. """
  2. Simple auto test discovery.
  3. From http://stackoverflow.com/a/17004409
  4. """
  5. import os
  6. import sys
  7. import unittest
  8. if not hasattr(unittest.defaultTestLoader, 'discover'):
  9. try:
  10. import unittest2 as unittest
  11. except ImportError:
  12. raise ImportError('The unittest2 module is required to run tests on Python 2.6')
  13. def additional_tests():
  14. setup_file = sys.modules['__main__'].__file__
  15. setup_dir = os.path.abspath(os.path.dirname(setup_file))
  16. test_dir = os.path.join(setup_dir, 'tests')
  17. test_suite = unittest.defaultTestLoader.discover(test_dir)
  18. blacklist = []
  19. if '/home/travis' in __file__:
  20. # Skip some tests that fail on travis-ci
  21. blacklist.append('test_command')
  22. return exclude_tests(test_suite, blacklist)
  23. class SkipCase(unittest.TestCase):
  24. def skeleton_run_test(self):
  25. raise unittest.SkipTest("Test fails spuriously on travis-ci")
  26. def exclude_tests(suite, blacklist):
  27. """
  28. Example:
  29. blacklist = [
  30. 'test_some_test_that_should_be_skipped',
  31. 'test_another_test_that_should_be_skipped'
  32. ]
  33. """
  34. new_suite = unittest.TestSuite()
  35. for test_group in suite._tests:
  36. for test in test_group:
  37. if not hasattr(test, '_tests'):
  38. # e.g. ModuleImportFailure
  39. new_suite.addTest(test)
  40. continue
  41. for subtest in test._tests:
  42. method = subtest._testMethodName
  43. if method in blacklist:
  44. setattr(test,
  45. method,
  46. getattr(SkipCase(), 'skeleton_run_test'))
  47. new_suite.addTest(test)
  48. return new_suite