在模块中运行每个TestCase

时间:2013-02-14 06:57:21

标签: django django-testing

如何在测试包下的特定模块中运行所有TestCase类的测试?

在Django项目中,我在tests /
下测试了tests.py 每个文件(模块)都有几个TestCase类,每个类都有几个测试方法。 init .py会导入每个。

我已经知道我可以做到这些:

  1. 运行所有测试:

    ./manage.py test myapp
    
  2. 或运行特定的TestCase:

    ./manage.py test myapp.OneOfManyTestCase    
    
  3. 或者从TestCase类中运行非常具体的测试方法:

    ./manage.py test myapp.OneOfManyTestCase.test_some_small_method
    
  4. 但是,我无法弄清楚如何从特定模块运行每个TestCase。
    比如,OneOfManyTestCase类来自tests/lot_of_test.py,还有其他测试用例。
    Django似乎并不关心使用TestCases的模块。

    如何在lot_of_test内运行所有TestCase?

2 个答案:

答案 0 :(得分:1)

我认为要实现这一点,您需要从DjangoTestSuiteRunner继承自己的TestRunner并覆盖build_suite方法。

答案 1 :(得分:1)

我最终writing down my own TestSuiteRunner,就像@sneawo所说的那样。

Django-style失败后,尝试像往常一样导入python-style。

One line要修复:

suite.addTest(build_test(label))

进入

try:
    suite.addTest(django.test.simple.build_test(label))
except ValueError:
    # change to python-style package name
    head, tail = label.split('.', 1)
    full_label = '.'.join([head, django.test.simple.TEST_MODULE, tail])
    # load tests
    tests = unittest.defaultTestLoader.loadTestsFromName(full_label)
    suite.addTests(tests)

并在TEST_RUNNER中设置settings.py

TEST_RUNNER='myapp.tests.module_test_suite_runner.ModuleTestSuiteRunner'