尝试使用带有泛型参数的mockito python存根函数时出错



我一直在看,在Python中没有看到任何与我有相同问题的人。

我可能在这里很愚蠢,但我正在努力根除一个接受多个参数的方法。在我的测试中,我只想返回一个值,而不管参数(即对于每个调用只是返回相同的值)。因此,我一直试图使用"通用"的论点,但我显然做错了什么。

有人能指出我的问题吗?

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中总是这样做,但我想不出我做错了什么。

任何想法?

any在本例中是内置的any,它需要一个某种类型的可迭代对象,如果可迭代对象中的任何一个元素为真,则返回True。您需要显式导入matchers.any:

from mockito.matchers import any as ANY
when(myMock).myfunction(ANY(list), ANY(list), ANY(str), ANY(str)).thenReturn(mockReturn)

相关内容

  • 没有找到相关文章