我试图从具有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)
匹配器做广告的内容,它只返回一个空值。据说演员应该调用正确的方法,但由于某种原因,它没有使用正确的方法注册。
也接受任何解决方法。
感谢。
答案 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)