我正在为我的包编写一些单元测试。我们说我有以下文件:
在a.py中,我有课程:
class A:
def m(x):
def n(y):
def o(self, z):
pass # Parsing z
if len(z) == x:
y(self, z)
return o
return n
在test_a.py中,我使用from package import a
指令。作为这个单元测试的一部分,我想知道y是否被调用但是没有调用y(模拟这个调用)。
我怎么能做这个嘲笑?
答案 0 :(得分:1)
只需将模拟对象传递为y
:
from unittest.mock import MagicMock
decorator = A.m(1)
y_mock = MagicMock()
decorated = decorator(y_mock)
self_mock = MagicMock()
decorated(self_mock, ['foo'])
y_mock.assert_called_with(self_mock, ['foo'])
上面通过调用A.m()
创建了一个装饰器,将装饰器应用到y_mock
对象,生成一个装饰的'函数,就像你使用了行{{1在@A.m(1)
函数定义语句之前。
然后我为装饰器创建了2个参数,这样您就可以轻松测试def
是否被正确调用。