Groovy Mockito任何匹配器不使用重载方法为doAnswer工作
我正在尝试从一个gradle类中存根一个void方法,该类有2个重载,mockito匹配器正在匹配Worn方法,而我的存根失败了。以下是我到目前为止的情况: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
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)
谢谢!这让我发疯。