我可以在python中使用`mock`来模拟一个带有指定参数的方法吗?

时间:2013-12-02 08:57:22

标签: python mocking python-mock python-unittest

我知道如果我这样做:

import mock
my.factory = mock.MagicMock()

然后my.factory所有的东西都被嘲笑了,但是有一种方法:create_fruit(self, type)我想要传入'apple'然后返回一个模拟'apple'对象,如果我传入'banana'然后返回'banana'个对象。

这可以由mock模块实现吗?我在doc中找不到它: https://pypi.python.org/pypi/mock

1 个答案:

答案 0 :(得分:0)

是的,你可以。但是你必须为它定义一个函数。

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函数的最后一行是动态创建一个类,创建它的一个实例,然后将它返回给调用者。