首页 > 解决方案 > 在一个测试文件中导入之前模拟正在影响另一个测试文件

问题描述

我有一个在导入时有副作用的类:它使用来自已部署基础架构的值填充一个字段。基本上归结为:

class MyModel:
    class Meta:
        table_name = get_param("table_name")

我想MyModel离线测试中使用实例,所以我需要确保 boto3 实际上没有运行生产get_param代码。我通过get_param在这些测试中模拟来做到这一点:

with patch("….get_param"):
    from … import MyModel

    def test_…

笨重,但它有点工作。问题是,如果我pytest先运行这个测试文件,然后运行验收测试文件(确实需要使用 real get_param),验收测试最终会得到一个模拟版本get_param(颠倒文件顺序使两个测试都通过)。验收测试本身运行良好,但我宁愿不要基于这样一个奇怪的前提拆开测试套件。有没有办法避免这种命名空间污染?

标签: pythonpython-3.xmockingpytest

解决方案



推荐阅读