Mockito任何没有使用重载方法的doAnswer工作的匹配器

时间:2014-09-15 21:15:38

标签: groovy gradle mockito

我试图从具有2个重载的gradle类中存根void方法,并且mockito匹配器与worng方法匹配,并且我的存根很麻烦。以下是我到目前为止的情况:

doAnswer(new Answer<Void>() {
  @Override
  Void answer(final InvocationOnMock invocation) throws Throwable {
    Closure clo = invocation.arguments[0] as Closure
    clo.run()
    return null
  }
}).when(mProject).afterEvaluate(any(Closure.class))

但是当我调试调用以查看匹配器时,它正在寻找方法public abstract void org.gradle.api.Project.afterEvaluate(org.gradle.api.Action)而不是public abstract void org.gradle.api.Project.afterEvaluate(groovy.lang.Closure)

只是提到这不是Java,而且我不确定它是否与它有任何关系。

我已经检查了any(Closure.class)匹配器做广告的内容,它只返回一个空值。据说演员应该调用正确的方法,但由于某种原因,它没有使用正确的方法注册。

也接受任何解决方法。

感谢。

1 个答案:

答案 0 :(得分:4)

好的,我发现了另一个问题Unexpected behavior with overloaded methods

显然是groovy的错,因为我必须将null转换为正确的类型,即使any(Closure.class)方法已经返回正确的类型。像这样:

doAnswer(new Answer<Void>() {
  @Override
  Void answer(final InvocationOnMock invocation) throws Throwable {
    Closure clo = invocation.arguments[0] as Closure
    clo.run()
    return null
  }
}).when(mProject).afterEvaluate(any(Closure.class) as Closure)