使用 mock 和 pytest 在 python 中模拟装饰器
Mocking decorators in python with mock and pytest
如何使用 monkeypatch 或 pytest.mock 修补我的自定义装饰器?我设法通过做(回答 this 问题)来嘲笑它:
package.decorator = mytestdecorator
问题是它破坏了一些我实际上需要装饰器工作的其他测试。
您必须控制模拟装饰器的完整生命周期并将装饰器恢复到原始状态。
可以通过几种不同的方式完成:
- 构建模拟装饰器的上下文管理器,并通过
__exit__
恢复它。
- 测试的设置和拆卸功能,
teardown
必须还原装饰器。
pytest
带有终结器的夹具
pytest
夹具 yield
表达式。
我个人喜欢 @pytest.yield_fixture
因为它使代码简短,而且一旦你意识到,夹具代码中 yield
语句之后的所有内容都是清理代码,事情非常清楚要做。
如何使用 monkeypatch 或 pytest.mock 修补我的自定义装饰器?我设法通过做(回答 this 问题)来嘲笑它:
package.decorator = mytestdecorator
问题是它破坏了一些我实际上需要装饰器工作的其他测试。
您必须控制模拟装饰器的完整生命周期并将装饰器恢复到原始状态。
可以通过几种不同的方式完成:
- 构建模拟装饰器的上下文管理器,并通过
__exit__
恢复它。 - 测试的设置和拆卸功能,
teardown
必须还原装饰器。 pytest
带有终结器的夹具pytest
夹具yield
表达式。
我个人喜欢 @pytest.yield_fixture
因为它使代码简短,而且一旦你意识到,夹具代码中 yield
语句之后的所有内容都是清理代码,事情非常清楚要做。