python - 跨多个测试脚本模拟 Python 模块

标签 python pytest

在我的实现脚本中,我有一行记录指标:

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/

相关文章:

python - 在数据透视表中使用相同的值和列名

python - 对逗号分隔的数字字符串进行数字排序

python - "TypeError: ' 模块 ' object is not callable"在/test 文件夹下使用 py.test 运行时

python - 在 Flask-SQLAlchemy 中隔离 py.test 数据库 session

python - 在 ListView 上测试 get_context_data() 会抛出 'AttributeError: object has no attribute ' object_list'

python - Pytest 覆盖范围 : run cov over multiple folders

python - Python 中的 eig(a,b) 给出错误 "takes 1 positional argument but 2 were given"

python - Docker 中的 visdom.server

python - 将 pytest fixtures 保存在一个位置并跨子模块使用它们

python - 旋转后的 OpenGL python 和 pygame 翻译不适用于鼠标外观和移动