cla*_*ius 7 python unit-testing mocking python-3.x magicmock
class A():
def tmp(self):
print("hi")
def b(a):
a.tmp()
Run Code Online (Sandbox Code Playgroud)
要检查是否在b中调用了tmp方法,推荐的方法是
a = A()
a.tmp = MagicMock()
b(a)
a.tmp.assert_called()
Run Code Online (Sandbox Code Playgroud)
但是这里的tmp被嘲笑了,并没有导致"hi"被打印出来。
我希望我的单元测试可以检查方法tmp是否被调用而不会模拟它。
这可能吗?
我知道在编写unitest时这不是标准的事情。但是我的用例(有点棘手)需要这样做。
您可以将设置Mock.side_effect为原始方法。
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()
Run Code Online (Sandbox Code Playgroud)
when side_effect是一个函数(或在这种情况下为绑定方法,这是一种函数),调用Mock还将side_effect使用相同的参数调用。
该Mock()调用将返回无论side_effect回报,除非它返回的unnittest.mock.DEFAULT单。然后它将返回Mock.return_value。
| 归档时间: |
|
| 查看次数: |
1612 次 |
| 最近记录: |