在我的实现脚本中,我有一行记录指标:
from datadog import statsd
def some_function:
statsd.increment('some_metric')
从我的测试脚本中,我断言 statsd.increment() 是通过模拟 datadog 模块来调用的:
datadog = Mock()
sys.modules['datadog'] = datadog
def test():
some_function()
datadog.statsd.increment.assert_called()
这工作正常并且通过。但是,一旦我添加另一个调用 some_function()
而不模拟 datadog 的脚本,该脚本就会预先运行并将真正的 datadog 模块加载到缓存中。上述测试失败,因为 some_function()
不再使用模拟数据狗,它使用真实的(缓存的)数据狗。
我该如何解决这个问题?是否可以从缓存中删除该模块?
最佳答案
您是否尝试过在函数 test
中模拟 datalog
模块?只要您的其他脚本没有与您的测试同时运行,这就可能有效。这样,只有在调用函数时才会设置模拟本身,而不是在脚本作用域中设置。
关于python - 跨多个测试脚本模拟 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53323761/