用mock 模拟一个方法很简单,例如,像这样:
o.get_idlist = mock.Mock(return_value=[1])
但是,这将每次get_idlist()
返回。[1]
有没有办法让它[1]
只返回一次,随后的调用返回[]
(例如)而不使用side_effect=somefun
?我想我想要的是一种副作用,但是你去吧。
(我只是认为为此创建一个大喇叭命名函数太笨拙了......或者有没有办法在这里使用 lambda?)
用mock 模拟一个方法很简单,例如,像这样:
o.get_idlist = mock.Mock(return_value=[1])
但是,这将每次get_idlist()
返回。[1]
有没有办法让它[1]
只返回一次,随后的调用返回[]
(例如)而不使用side_effect=somefun
?我想我想要的是一种副作用,但是你去吧。
(我只是认为为此创建一个大喇叭命名函数太笨拙了......或者有没有办法在这里使用 lambda?)
假设您没有任何反对side_effect
自己的东西,只是不想创建一个完整的功能,您可以大致执行以下操作
>>> from unittest.mock import Mock
>>> m = Mock()
>>> m.side_effect = [1] + [[]]*100
>>> m()
1
>>> m()
[]
>>> m()
[]
>>> m()
[]
>>> m()
[]
我承认它有点脏,但如果你只是想做一个快速测试,它应该就足够了。当然,您可以将 [] 替换为 [0] 或您喜欢的任何内容。
我认为使用库做你想做的唯一方法python-mock
是使用side_effect
. 我可以给你一个替代方案:
看看mockito库。有了它很容易做出你想要的:
from mockito import when
when(o).get_idlist().thenReturn([1]).thenReturn([])