django - 使用@override_settings 覆盖 TEST_RUNNER

标签 django unit-testing test-runner

为了更快地运行我的测试,我创建了一个无数据库测试运行器,如 this answer .然后,我需要将 TEST_RUNNER 设置变量设置为我的新测试运行程序,但仅限于某些测试。为此,我尝试使用 django.test.utils.override_settings 装饰器,如下所示(如 docs 中所示):

from django.test import TestCase
from django.test.utils import override_settings

class MyTestCase(TestCase):
    @override_settings(TEST_RUNNER='path_to_my_no_db_test_runner')
    def test_my_test_case(self):
        ...

问题是当我运行这个测试时,django 仍然会创建数据库,这当然不是预期的行为。奇怪的是,如果我直接在我的 settings.py 中设置 TEST_RUNNER 它会完美运行,但是使用 django.test.utils.override_settings它似乎没有效果。我也尝试使用 this override_settings module但得到了相同的结果。

我 dping 哪里错了?还有其他方法可以实现这一目标吗?我不想创建 test_settings.py 并使用 --settings 参数运行我的测试。

最佳答案

将这段代码放入你的配置中:

TESTING = 'test' in sys.argv

...

if TESTING:
    TEST_RUNNER = 'path_to_my_no_db_test_runner'
    DATABASES = {}

TESTING 设置只会在您运行测试时定义,然后您可以动态更改一些设置,包括您的数据库、迁移、测试运行器...

它将在 Django 初始化的最开始加载,因此如果您覆盖 DATABASES,则不会创建 DB。

关于django - 使用@override_settings 覆盖 TEST_RUNNER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20725128/

相关文章:

unit-testing - 如何禁用 Visual Studio 2012 中的测试资源管理器

MSBuild 运行单元测试

django - apache solr 响应中的字段应该是单数时是多值的

django - 与 angularjs 一起使用 mezzanine

C# NUnit 单元测试未使用正确的方法返回以进行比较

C# 在内存数据库中共享索引?

android - Mockito 想要但未调用 - 但是,与此模拟正好有 1 次交互

python - Windows 上的 Django 1.7 dumpdata 会扰乱 unicode 字符

Django 和 node.js : throw arguments[1];//Unhandled 'error' event

visual-studio-2012 - Resharper 6.1 测试运行程序抛出 BadImageFormatException