【问题标题】:Can I mock a method with specified parameters by using `mock` in python?我可以在python中使用`mock`来模拟具有指定参数的方法吗?
【发布时间】:2013-12-02 08:57:22
【问题描述】:
我知道我是否这样做:
import mock
my.factory = mock.MagicMock()
然后 my.factory 的所有东西都被模拟了,但实际上有一个方法:create_fruit(self, type) 我想要如果我传入'apple' 然后返回一个模拟的'apple' 对象,如果我传入一个@ 987654326@然后给我一个'banana'对象。
这可以通过mock 模块实现吗?我无法在文档中清楚地找到它:
https://pypi.python.org/pypi/mock
【问题讨论】:
标签:
python
mocking
python-mock
python-unittest
【解决方案1】:
是的,你可以。但是你必须为它定义一个函数。
from mock import Mock
def mock_create_fruit(fruit):
if fruit not in ('apple', 'banana'):
raise AssertionError('create_fruit not called with an allowed type, was %s' % (fruit,)
return type(fruit, (object,), {})()
my.factory.create_fruit = Mock(side_effect=mock_create_fruit)
我们的 mock_create_fruit 函数的最后一行是动态创建一个类,创建它的一个实例,然后将它返回给调用者。