用于Python的模拟库,在模拟函数中只返回一次值?

时间:2013-05-08 12:30:50

标签: python unit-testing mocking

使用mock模拟方法很简单,例如,像这样:

    o.get_idlist = mock.Mock(return_value=[1])

但是,这会使get_idlist()每次都返回[1]。有没有办法让它只返回[1]一次,后续调用返回[](例如)而不使用side_effect=somefun?我猜我想要的一种副作用,但你去了。

(我只是认为为此创建一个大的鸣笛命名函数是如此笨拙......还是有办法在这里使用lambda?)

2 个答案:

答案 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]或任何您喜欢的东西。