Mockito-从非存根方法调用存根方法



这里有一个非常初学者的问题:

我模拟的类具有方法Map<String, Integer>methodA(String p1,String p2,String p3, SomeClass p4)MyClass methodB(String p1,String p2,String p3)

方法A内部调用方法B:

Map<String, Integer> methodA(String p1, String p2, String p3, SomeClass p4){
MyClass data = methodB(p1,p2,p3);
.... do something
... return Map.  
}

我正在打乱方法B。

when(mockedTestClass.methodB(p1, p2, p3, null)).thenReturn(myData);

我使用null作为第四个参数,因为SomeClass是一个抽象类。当我在测试中使用p1、p2、p3和null(p4)参数直接调用stubed方法时,它会返回正确的mock数据(MyClass的实例)。

然而,如果我调用methodA,似乎没有调用methodB,并且返回空Map(非null)。

是什么原因造成的?

提前谢谢你,

尤里。

如果我理解正确的话,您有一个正在嘲笑的类ClassA,它有两个方法,method1method2。您知道ClassA.method1恰好在内部调用method2。所以您只嘲笑了method2,并用默认行为留下了method1,对吧?

所以在这种情况下,这两个方法实际上都是被嘲笑的,你是在类级别而不是方法级别上嘲笑。当你做when时,你会说,"我希望这个方法在这个特定的情况下返回这个确切的结果。如果你不使用when,那么这个方法就是一个空的mock,为它返回的类型返回一个null或空值。假设你不指定,你就不在乎。

因此,您应该看到,当类被嘲笑时,method1实际上并没有调用method2。这两种方法都是模拟的,只有对method2的直接调用才会返回when匹配器的结果。

此外,when用于确保在调用方法时返回特定的结果。如果你想验证某个方法实际上是用特定的参数调用的,你可以这样做:

verify(mockedClass).someMethod(p1, p2, p3, null); // <- or use matchers for the parameters

相关内容

  • 没有找到相关文章

最新更新