如何模拟另一个模块中使用的django设置属性?

Jam*_*Lin 8 python mocking

让我们说模块a代码:

from django.conf import settings
print settings.BASE_URL # prints http://example.com
Run Code Online (Sandbox Code Playgroud)

tests.py我想嘲笑BASE_URLhttp://localhost

我尝试过以下方法:

with mock.patch('django.conf.settings.BASE_URL', 'http://localhost'):
    pass

with mock.patch('a.settings.BASE_URL', 'http://localhost'):
    pass

from a import settings

with mock.patch.object(settings, 'BASE_URL', 'http://localhost'):
    pass

import a

with mock.patch.object(a.settings, 'BASE_URL', 'http://localhost'):
    pass
Run Code Online (Sandbox Code Playgroud)

以上都没有奏效.

KeP*_*ePe 9

尝试使用上下文管理器设置()内置django.

with self.settings(BASE_URL='http://localhost'):
    # perform your test
Run Code Online (Sandbox Code Playgroud)

https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.SimpleTestCase.settings


Far*_*der 7

您还可以在单​​个测试函数或整个测试类上使用以下装饰器。

@override_settings(BASE_URL='http://localhost')
Run Code Online (Sandbox Code Playgroud)