使用mock模拟方法很简单,例如,像这样:
o.get_idlist = mock.Mock(return_value=[1])
但是,这会使get_idlist()
每次都返回[1]
。有没有办法让它只返回[1]
一次,后续调用返回[]
(例如)而不使用side_effect=somefun
?我猜我想要的是一种副作用,但你去了。
(我只是认为为此创建一个大的鸣笛命名函数是如此笨拙......还是有办法在这里使用lambda?)
答案 0 :(得分:1)
我认为使用python-mock
库执行所需操作的唯一方法是使用side_effect
。
我可以给你一个替代方案:
查看mockito库。 随着它很容易做你想要的:
from mockito import when
when(o).get_idlist().thenReturn([1]).thenReturn([])
答案 1 :(得分:1)
假设您本身对side_effect
没有任何要求,但是不想创建一个完整的函数,则可以大致执行以下操作
>>> from unittest.mock import Mock
>>> m = Mock()
>>> m.side_effect = [1] + [[]]*100
>>> m()
1
>>> m()
[]
>>> m()
[]
>>> m()
[]
>>> m()
[]
我承认它有点脏,但是如果您只是想进行快速测试,那就足够了。当然,您可以将[]替换为[0]或任何您喜欢的东西。