我们在python中使用Mock已经有一段时间了.

现在,我们有一种情况,我们想要模拟一个函数

def foo(self, my_param):
    #do something here, assign something to my_result
    return my_result

通常,模拟这一点的方法是(假设foo是对象的一部分)

self.foo = MagicMock(return_value="mocked!")

即使我多次调用foo(),我也可以使用

self.foo = MagicMock(side_effect=["mocked once", "mocked twice!"])

现在,我面临这样一种情况:当输入参数具有特定值时,我想返回一个固定值.因此,如果假设"my_param"等于"Something",那么我想返回"my_Cool_mock"

这似乎在mockito for python上有售

when(dummy).foo("something").thenReturn("my_cool_mock")

我一直在寻找如何用Mock实现同样的目标,但没有成功?

有什么 idea 吗?

推荐答案

如果side_effect_func是一个函数,那么该函数返回的值就是

>>> def side_effect_func(value):
...     return value + 1
...
>>> m = MagicMock(side_effect=side_effect_func)
>>> m(1)
2
>>> m(2)
3
>>> m.mock_calls
[call(1), call(2)]

http://www.voidspace.org.uk/python/mock/mock.html#calling

Python相关问答推荐

Numpy索引argsorted使用integer数组,同时保留排序顺序

KNN分类器中的GridSearchCV

使用regex分析具有特定字符的字符串(如果它们存在)

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

优化在numpy数组中非零值周围创建缓冲区的函数的性能

用Python解密Java加密文件

使用@ guardlasses. guardlass和注释的Python继承

我们可以为Flask模型中的id字段主键设置默认uuid吗

如何请求使用Python将文件下载到带有登录名的门户网站?

如何在Python数据框架中加速序列的符号化

如何在给定的条件下使numpy数组的计算速度最快?

为一个组的每个子组绘制,

跳过嵌套JSON中的级别并转换为Pandas Rame

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

并行编程:同步进程

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

BeautifulSoup:超过24个字符(从a到z)的迭代失败:降低了首次深入了解数据集的复杂性:

如何反转一个框架中列的值?

python的文件. truncate()意外地没有截断'