使用泛型参数

时间:2015-10-26 16:39:56

标签: python python-2.7 mockito typeerror stubbing

我一直在看,在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做这件事但却无法想到我做错了什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

在这种情况下,

anythe 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)