关于测试:使用mock和pytest在python中模拟装饰器

Mocking decorators in python with mock and pytest

如何使用monkeypatch或pytest.mock修补我的自定义装饰器? 我设法嘲笑它(回答这个问题):

package.decorator = mytestdecorator

问题是它打破了其他一些我真正需要装饰器工作的测试。


您必须控制模拟装饰器的完整生命周期并将装饰器恢复到原始状态。

它可以通过几种不同的方式完成:

  • 构建模拟装饰器的上下文管理器,并通过__exit__将其还原。
  • 测试的设置和拆卸功能,teardown必须还原装饰器。
  • 带有终结器的pytest夹具
  • 具有yield表达式的pytest fixture。

我个人喜欢@pytest.yield_fixture,因为它保持代码简短,一旦你意识到,在fixture代码中的yield语句之后的所有内容都是清理代码,事情很清楚。