Kotlin的参数匹配者



我正在尝试在测试中使用参数matcher。我下一个:

Mockito.`when`(someRepository.save(
        argThat { it.name == someName } // Here I want to do mock for all objects with name someName
    )).thenReturn(save(someEntity))

我会得到下一个错误:类型推理失败:没有足够的信息来推断fun when中的参数t(p0:t!(:on nowerStubbing!

如何正确编写kotlin中的参数matcher?

我强烈建议使用Nhaarman的Mockito-Kotlin代替Vanilla Mockito。它具有许多优势,可以在Kotlin中使用较少的问题,因为Mockito旨在在Java中使用。您可以看到有关如何在Kotlin中使用参数匹配器的指南。您的示例看起来非常相似,但是类型推理的问题应该更少。

我通过从Java类添加参数匹配者找到了解决方案。我的IDE将其转换为Kotlin:

在Java中:

Mockito.when(someRepository.save(ArgumentMatchers.argThat(entity-> entity.getName().equals("someName")
            && entity.getDescription().equals("somedescritpion")
            ))));

在Kotlin中:

Mockito.`when`<Any>(someRepository.save(ArgumentMatchers.argThat { (name, _, description, ) ->
        (name == "someName" && description == "somedescritpion"
                )
    }))

注意:如果您有一些不想在比赛中考虑的字段,则应添加_。

使用someRepository.save(Mockito.any<String>())。只要您是String,您就不会关心您传达的论点。空值也很重要。

相关内容

  • 没有找到相关文章

最新更新