2024-09-28 21:35:05 发布
网友
class A(): def tmp(self): print("hi") def b(a): a.tmp()
要检查是否在b中调用了tmp方法,建议的方法是
但是这里的tmp被嘲笑掉了,并没有导致"hi"被打印出来。在
"hi"
我想让我的单元测试检查是否调用了tmp方法,而不去模仿它。在
这可能吗?在
我知道这不是编写unitest的标准要求。但我的用例(有点棘手)需要这样做。在
您可以将^{}设置为原始方法。在
from unittest.mock import MagicMock class A(): def tmp(self): print("hi") def b(a): a.tmp() a = A() a.tmp = MagicMock(side_effect=a.tmp) b(a) a.tmp.assert_called()
当side_effect是一个函数(或在本例中是一种函数的绑定方法)时,调用Mock也将使用相同的参数调用{}。在
side_effect
Mock
Mock()调用将返回side_effect返回的任何内容,除非它返回^{}单例。然后它将返回^{}。在
Mock()
或者您可以装饰测试方法:
def check_called(fun): def wrapper(self, *args, **kw): attrname = "_{}_called".format(fun.__name__) setattr(self, attrname, True) return fun(self, *args, **kw) return wrapper a = A() a.tmp = check_called(a.tmp) b(a) assert(getattr(a, "_tmp_called", False))
但是如果您已经在使用Mock,MagicMock的side_effect无疑是一个更好的解决方案;)
您可以将^{} 设置为原始方法。在
当}。在
side_effect
是一个函数(或在本例中是一种函数的绑定方法)时,调用Mock
也将使用相同的参数调用{Mock()
调用将返回side_effect
返回的任何内容,除非它返回^{或者您可以装饰测试方法:
但是如果您已经在使用Mock,MagicMock的
side_effect
无疑是一个更好的解决方案;)相关问题 更多 >
编程相关推荐