[英]How to stub overloaded method in Mockito using Groovy?
Groovy似乎弄乱了我的存根。 以下测试通过:
MockitoStubTest2.java:
public class MockitoStubTest2 {
@Test
public void testStubbing() {
MyInterface myInterface = mock(MyInterface.class);
when(myInterface.someMethod(isA(MyClass.class))).thenReturn("foobar");
assertEquals("foobar", myInterface.someMethod(new MyClass()));
}
private interface MyInterface {
String someMethod(MyClass arg);
String someMethod(String arg);
}
private static class MyClass {}
}
但是,这个失败了groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method ...#someMethod
:
MockitoStubTest3.groovy:
public class MockitoStubTest3 {
@Test
public void testStubbing() {
MyInterface myInterface = mock(MyInterface.class);
when(myInterface.someMethod(isA(MyClass.class))).thenReturn("foobar");
assertEquals("foobar", myInterface.someMethod(new MyClass()));
}
private interface MyInterface {
String someMethod(MyClass arg);
String someMethod(String arg);
}
private static class MyClass {}
}
唯一的区别是一个用Java运行,另一个用Groovy运行。
我怎么能这样做Mockito将成功在Groovy中存根重载方法? 这是一个简单的例子,但我有一个我需要测试的实际用例。
好吧,我在发布这个问题之后就明白了......即使我整天都在和这个人打架。
问题是Mockito匹配器方法返回null
但Groovy由于某种原因搞砸了类型转换。 因此,您需要手动进行类型转换,以便找到正确的存根方法。 以下作品:
MockitoStubTest3.groovy:
public class MockitoStubTest3 {
@Test
public void testStubbing() {
MyInterface myInterface = mock(MyInterface.class);
when(myInterface.someMethod(isA(MyClass.class) as MyClass)).thenReturn("foobar");
assertEquals("foobar", myInterface.someMethod(new MyClass()));
}
private interface MyInterface {
String someMethod(MyClass arg);
String someMethod(String arg);
}
private static class MyClass {}
}
我从这个类似的问题得到了答案: Mockito任何匹配器都没有使用重载方法为doAnswer工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.