kotlin - mockk的allAny()是如何使用的

标签 kotlin mockk

我找不到关于 allAny() 的任何我能理解的文档。 official文档将其描述为“使用 any() 而不是 eq() 作为简单参数提供的匹配器的特殊匹配器”。我不明白这是什么意思。

我有一条线

every { mockObject.method(any(), any(), any(), any(), any(), any(), any(), any(), any()) } returns 0

我认为 allAny() 可能能够取代 any() 的重复使用,当然 mockObject.method(allAny()) 是语法错误,因为参数太少。

那么allAny()有什么用呢?

最佳答案

Mockk 是一个很棒的库,但官方文档中的一些示例没有提供原始的模拟类。这导致歧义。文档没有太大帮助。

假设 Car 类有一个方法 fun accelerate(fromSpeed: Int, toSpeed: Int)。 在这种情况下,使用 allAny() 参数会产生语法错误。

但是,如果我们的accelerate 方法具有toSpeedfromSpeed 的默认值,编译器不会报错。

fun accelerate(fromSpeed: Int, toSpeed: Int = 100) { /* ... */ }

让我们进行如下测试。

val car = mockk<Car>(relaxed = true)
car.accelerate(fromSpeed = 10, toSpeed = 20)
car.accelerate(fromSpeed = 30)

// will pass
verify(atLeast = 2) { car.accelerate(allAny()) }

// will not pass
verify(atLeast = 2) { car.accelerate(any()) }

confirmVerified(car)

allAny 将无缝通过,但 any 不会。 any 接受 fromSpeed 的所有值,但不接受 toSpeed 的所有值。

Verification failed: call 1 of 1: Car(#1).accelerate(any(), eq(100))). 1 matching calls found, but needs at least 2 calls
Calls:
1) Car(#1).accelerate(10, 20)
2) Car(#1).accelerate(30, 100)

希望对您有所帮助。

关于kotlin - mockk的allAny()是如何使用的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72778774/

相关文章:

java - 通用动画叠加 View 的枢轴不起作用

kotlin - 动态显示状态信息到参与者列表

android - Mockk 模拟 Kotlin 的私有(private)属性(property)

kotlin - 继续模拟扩展

android - Dagger 不注入(inject) Activity

kotlin - "experimental"Kotlin协程可以在生产中使用吗?

android-studio - 如何在 Android Studio 中附加 Kotlin 源代码?

gradle - 尝试将 Kotlin Native 与 IntelliJ 的基础项目一起使用,但无法编译

unit-testing - 一次只 mock 一个电话

kotlin - 模拟验证lambda参数