在Kotlin使用Mockito doAnswer

vog*_*Dev 11 testing mockito kotlin

什么是Kotlin相当于这个Java代码?

doAnswer(new Answer() {
    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        Design design = new Design();
        GetDesign.Listener callback = (GetDesign.Listener) invocation.getArguments()[0];
        callback.onSuccess(design);
        return null;
    }
}).when(someRepository).getDesign(any(GetDesign.Listener.class));
Run Code Online (Sandbox Code Playgroud)

[更新]在尝试了几个选项后,我终于使用了mockito-kotlin.我认为这是最舒适的实施方式doAnswer.语法几乎保持不变:

doAnswer {
    callback = it.arguments[0] as GetDesign.Listener
    callback.onSuccess(Design())
    null
}.whenever(someRepository).execute(any(GetDesign.Listener::class.java))
Run Code Online (Sandbox Code Playgroud)

可以在此处找到完整的代码和build.gradle配置

Ant*_*vin 20

doAnswer {
    val design = Design()

    val callback = it.arguments[0] as GetDesign.Listener
    callback.onSuccess(design)

    null // or you can type return@doAnswer null

}.`when`(someRepository).getDesign(any(GetDesign.Listener::class.java))
Run Code Online (Sandbox Code Playgroud)

  • @voghDev如果这个答案已经解决了你的问题,请点击复选标记考虑[接受](https://meta.stackexchange.com/q/5234/179419).这向更广泛的社区表明,您已经找到了解决方案,并为回答者和您自己提供了一些声誉.没有义务这样做. (2认同)
  • 这确实是正确的答案。我只会在任何时候都替换一下“ when”,因为mockito-kotlin添加了这个看起来更干净的功能。我还将更新问题文本。谢谢 (2认同)