我正试图从一个有2个重载和mockito匹配器的gradle类中截取一个void方法,而我的存根正在失败。以下是我目前所拥有的:
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)
只是提到这是groovy而不是Java,我不确定这是否与之有关
我已经检查了any(Closure.class)
匹配器的作用,它只是返回一个空值。假定强制转换应该调用正确的方法,但由于某些原因,它没有注册到正确的方法。
也接受任何变通方法。
谢谢。
好的,我发现了另一个问题重载方法的意外行为
显然这是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)