2

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

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

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

(我只是认为为此创建一个大喇叭命名函数太笨拙了......或者有没有办法在这里使用 lambda?)

4

2 回答 2

2

假设您没有任何反对side_effect自己的东西,只是不想创建一个完整的功能,您可以大致执行以下操作

>>> from unittest.mock import Mock
>>> m = Mock()
>>> m.side_effect = [1] + [[]]*100
>>> m() 
1
>>> m()
[] 
>>> m()
[]
>>> m()
[]
>>> m()
[]

我承认它有点脏,但如果你只是想做一个快速测试,它应该就足够了。当然,您可以将 [] 替换为 [0] 或您喜欢的任何内容。

于 2018-07-03T08:11:15.033 回答
1

我认为使用库做你想做的唯一方法python-mock是使用side_effect. 我可以给你一个替代方案:

看看mockito库。有了它很容易做出你想要的:

from mockito import when

when(o).get_idlist().thenReturn([1]).thenReturn([])
于 2013-05-08T12:37:21.547 回答