我一直在看,在Python中看不到任何与我有同样问题的人。
我可能在这里非常愚蠢,但我试图找出一个带有几个参数的方法。在我的测试中,我只想返回一个值而不管参数(即每次调用只返回相同的值)。因此,我一直在努力使用' generic'争论,但我显然做错了什么。
有人能发现我的问题吗?
from mockito import mock, when
class MyClass():
def myfunction(self, list1, list2, str1, str2):
#some logic
return []
def testedFunction(myClass):
# Logic I actually want to test but in this example who cares...
return myClass.myfunction(["foo", "bar"], [1,2,3], "string1", "string2")
mockReturn = [ "a", "b", "c" ]
myMock = mock(MyClass)
when(myMock).myfunction(any(list), any(list), any(str), any(str)).thenReturn(mockReturn)
results = testedFunction(myMock)
# Assert the test
我已经成功地在上面的基本代码中复制了我的问题。在这里,我只想为任何一组参数存根MyClass.myfunction。如果我把论点留下来 - 即:
when(myMock).myfunction().thenReturn(mockReturn)
然后什么都不返回(因此存根不起作用)。然而,使用'泛型参数'以下错误:
when(myMock).myfunction(any(list), any(list), any(str), any(str)).thenReturn(mockReturn)
TypeError: 'type' object is not iterable
我知道我必须做一些愚蠢的事情,因为我以前一直用Java做这件事但却无法想到我做错了什么。
有什么想法吗?
答案 0 :(得分:4)
any
是the built-in any
,它需要某种迭代,如果iterable中的任何元素都是真的,则返回True
。您需要明确导入matchers.any
:
from mockito.matchers import any as ANY
when(myMock).myfunction(ANY(list), ANY(list), ANY(str), ANY(str)).thenReturn(mockReturn)