Mockito任何不适用于带有重载方法的doAnswer的匹配器



我正试图从一个有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)

相关内容

  • 没有找到相关文章

最新更新