如何在单元测试中模拟装饰器适用于它的函数?

时间:2012-04-24 16:36:16

标签: python unit-testing mocking

@lolcat_decorator1
@loldog_decorator2
@lolrat_decorator3
def lolanimal(*args, **kwargs):
  ....

我相信我会单独对这些装饰器进行单元测试。但是这些装饰器会首先对传递给lolanimal的参数执行操作,然后lolanimal会对这些修改过的参数执行操作(其中一个装饰器可能会向**kwargs插入新的关键字参数。)

那么嘲笑它的最佳方式是什么?

由于

2 个答案:

答案 0 :(得分:4)

我的第一个想法是创建一个_lolanimal方法,它封装lolanimal的所有实际功能,然后让lolanimal通过_lolanimal的包装。然后,您可以使用您完全控制的数据针对_lolanimal运行所有测试。

您也可以创建第二个装饰器,它将在第一个读取配置值之前,或某些类型的测试模式,如果配置值为true,将覆盖lolspecific装饰器。 ..

答案 1 :(得分:0)

我的第一个想法是你应该将装饰器视为函数实现的一部分,并对单元测试“函数”,希望你不需要将依赖注入那些装饰器 - 如果你这样做,那么需要考虑Silas Ray的答案。