Dav*_*d A 6 python testing unit-testing mocking pytest
使用Python / PyTest进行单元测试时,如果您with patch
在代码中没有补丁装饰器或块,是否可以在每个文件/模块的末尾重置所有模拟,以避免文件间测试污染?
似乎在一个Python测试文件中模拟的内容在其他文件中仍具有相同的返回值,这意味着我的模拟在测试和文件之间持久存在(当with patch
不使用补丁装饰器或块时)。
除了打补丁,还有其他方法吗?不会碰巧有a之类的mock.reset_all_mocks()
东西,对吗?
我最终做的是使用pytest-mock库。根据自述文件:
这个插件安装了一个模拟装置,它是一个围绕优秀模拟包提供的补丁 API 的薄包装,但好处是不必担心在测试结束时撤消补丁。(加了重点。)
所以现在我可以做:mocker.patch.object(module, 'method', return_value='hi')
,测试结束时补丁将被删除。with
如果您在一个测试中有多个模拟,或者如果您想在测试期间更改模拟,则无需再使用此解决方案,因此该解决方案可以很好地扩展。
猴子修补后,我会在测试结束时撤消它,以避免泄漏到其他测试或将修补限制在范围内。
def test1(monkeypatch):
monkeypatch.setattr(...)
assert(...)
monkeypatch.undo()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2584 次 |
最近记录: |