在 Kotlin 中使用枚举验证方法调用

Verifying method call with enum in Kotlin

我正在尝试验证是否使用给定参数调用了方法。该参数是不可为 null 的枚举类型。所以我得到了异常 eq(SomeEnum.foo) must not be null。这是我正在尝试做的示例:

enum class SomeEnum {
    foo, bar
}

open class MyClass {
    fun doSomething() {
        magic(SomeEnum.foo)
    }

    internal fun magic(whatever: SomeEnum) {}
}

@Test
fun mockitoBug() {
    val sut = spy(MyClass())
    sut.doSomething()
    verify(sut).magic(eq(SomeEnum.foo))
}

抓包也不行。我能做什么,或者这真的是我认为的错误吗?

因为 Mockito 是为 Java 设计的,所以它不能很好地处理 Kotlin 的 null 检查。一个好的解决方案是使用 mockito-kotlin 扩展库:https://github.com/mockito/mockito-kotlin

它包括不会 return null 的匹配器的 Kotlin 版本。添加对 mockito-kotlin 的依赖,并确保导入 Kotlin 版本而不是 Java 版本。