在主Django数据库上运行Unittest

时间:2013-12-17 16:53:35

标签: python django testing celery nose

我正在寻找一种在django测试期间运行完整芹菜设置的方法,在此问other SO question

在考虑之后,我想我可以解决运行unittest(它更像是一个集成测试),我在其中运行针对主Django(开发)数据库的测试脚本。有没有办法编写单元测试,用Nose运行它们并对主数据库这样做?我想这将是关于django设置告诉Nose(或其他任何框架)的问题。

我看过django-nose但是找不到告诉它使用主数据库而不是测试数据库的方法。

2 个答案:

答案 0 :(得分:5)

我不知道鼻子,但这里是如何使用django(1.6)单元测试来运行和现有数据库。

from django.test.runner import DiscoverRunner
from django.db import transaction

class ExistingDBTestRunner(DiscoverRunner):

    def run_tests(self, test_labels, extra_tests=None, **kwargs):
        self.setup_test_environment()
        suite = self.build_suite(test_labels, extra_tests)
        #old_config = self.setup_databases()
        result = self.run_suite(suite)
        #self.teardown_databases(old_config)
        self.teardown_test_environment()
        return self.suite_result(suite, result)

然后在settings.py

if 'test' in sys.argv:
     TEST_RUNNER = '<?>.ExistingDBTestRunner'
     # alternative db settings?

在旧版本的django中会有所不同。此外,您可能需要覆盖测试用例中的_fixture_setup和_fixture_teardown才能通过。

上述代码将连接到预先存在的数据库,但由于每个测试都包含在事务中,因此其他连接(如芹菜工作者)无法使用这些更改。禁用事务的最简单方法是从unittest.TestCase而不是django.test.TestCase继承。

答案 1 :(得分:0)

你看过django-nose了吗?这似乎是适合这项工作的正确工具。