Groovy Mockito任何匹配器不使用重载方法为doAnswer工作

Groovy Mockito任何匹配器不使用重载方法为doAnswer工作,groovy,gradle,mockito,Groovy,Gradle,Mockito,我正在尝试从一个gradle类中存根一个void方法,该类有2个重载,mockito匹配器正在匹配Worn方法,而我的存根失败了。以下是我到目前为止的情况: doAnswer(new Answer<Void>() { @Override Void answer(final InvocationOnMock invocation) throws Throwable { Closure clo = invocation.arguments[0] as Closure

我正在尝试从一个gradle类中存根一个void方法,该类有2个重载,mockito匹配器正在匹配Worn方法,而我的存根失败了。以下是我到目前为止的情况:

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))
doAnswer(新答案(){
@凌驾
Void-answer(final-InvocationOnMock-invocation)抛出Throwable{
Closure clo=invocation.arguments[0]作为闭包
clo.run()
返回空
}
}).何时(项目).后评估(任何(关闭类))
但是当我调试调用以查看matcher时,它正在查找方法
public abstract void org.gradle.api.Project.afterevaluation(org.gradle.api.Action)
而不是
public abstract void org.gradle.api.Project.afterevaluation(groovy.lang.Closure)

只是提到这是groovy而不是Java,我不确定这是否与它有关

我已经检查了
any(Closure.class)
matcher做了什么,它只返回一个空值。假定cast应该调用正确的方法,但由于某些原因,它没有使用正确的方法注册

也接受任何解决方法


谢谢。

好的,我找到了另一个问题

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

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)
doAnswer(新答案(){
@凌驾
Void-answer(final-InvocationOnMock-invocation)抛出Throwable{
Closure clo=invocation.arguments[0]作为闭包
clo.run()
返回空
}
}).何时(项目).后评估(任何(Closure.class)为Closure)

谢谢!这让我发疯。