【问题标题】:ArgumentMatcher for KotlinKotlin 的 ArgumentMatcher
【发布时间】:2019-07-29 15:06:31
【问题描述】:

我正在尝试在我的测试中使用 ArgumentMatcher。接下来我做:

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

我得到下一个错误:类型推断失败:没有足够的信息来推断有趣的参数 T when(p0: T!): OngoingStubbing!

如何在 Kotlin 中正确编写 ArgumentMatcher?

【问题讨论】:

    标签: kotlin mockito argument-matching


    【解决方案1】:

    我强烈建议使用 nhaarman's mockito-kotlin 而不是香草 Mockito。由于 Mockito 是为在 Java 中使用而设计的,因此它具有许多优点,可以在 Kotlin 中使用更少的问题。您可以查看 this guide 了解如何在 Kotlin 中使用参数匹配器。您的示例看起来非常相似,但类型推断的问题应该更少。

    【讨论】:

      【解决方案2】:

      使用 someRepository.save(Mockito.any<String>()) 。只要它是String,那将不在乎您传递的参数是什么。空值也算。

      【讨论】:

        【解决方案3】:

        我通过从 java 类中添加 ArgumentMatcher 找到了解决方案。我的 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"
                        )
            }))
        

        注意:如果您不想在匹配器中考虑某些字段,则应添加 _。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多