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

时间:2016-04-13 23:41:21

标签: python mocking

让我们说模块a代码:

from django.conf import settings
print settings.BASE_URL # prints http://example.com

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

以上都没有。

2 个答案:

答案 0 :(得分:5)

尝试使用内置管理器设置()内置django。

with self.settings(BASE_URL='http://localhost'):
    # perform your test

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

答案 1 :(得分:1)

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

@override_settings(BASE_URL='http://localhost')