我正在寻找一种在django测试期间运行完整芹菜设置的方法,在此问other SO question
在考虑之后,我想我可以解决运行unittest(它更像是一个集成测试),我在其中运行针对主Django(开发)数据库的测试脚本。有没有办法编写单元测试,用Nose运行它们并对主数据库这样做?我想这将是关于django设置告诉Nose(或其他任何框架)的问题。
我看过django-nose
但是找不到告诉它使用主数据库而不是测试数据库的方法。
答案 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了吗?这似乎是适合这项工作的正确工具。