繁体   English   中英

如何使用Groovy在Mockito中存根重载方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM