使用Mockito for Python模拟可调用对象

时间:2018-03-26 12:32:26

标签: python mockito pytest

我有以下形式的功能:

def my_function(arg):
    f = get_anonymous_function(arg)
    return f()

我想在mockito中使用py.test来测试此功能。

所以我按如下方式编写测试:

def test_my_function(when):
    arg = mock()
    f = mock()
    when(my_module).get_anonymous_function(arg).thenReturn(f)

    expected = mock()
    when(f).thenReturn(expected)

    actual = my_module.my_function(arg)
    assert expected == actual

当我进行此类测试时,actualNone。如果我将when更改为when2,则Mockito会抱怨TypeError: can't guess origin of 'f'.

我的临时解决方案是使用f = lambda: return expected,然后跳过第二个when。这有效,但感觉不太对劲。还有更好的方法吗?

PS:“不要使用Mockito”并不是我正在寻找的答案。同样,“写my_function更好”不是一种选择,因为在使用外部包时会出现这种情况。

1 个答案:

答案 0 :(得分:0)

想出来。来自documentation(已更正拼写错误):

  

默认情况下,模拟可以调用。使用配置可调用行为   当:

dummy = mock()
when(dummy).__call__(1).thenReturn(2)