我找不到任何allAny()我能理解的文档。官方文档将其描述为“一个特殊的匹配器,它使用 any() 而不是 eq() 来作为简单参数提供的匹配器”。我不明白那是什么意思。
我有一条线
every { mockObject.method(any(), any(), any(), any(), any(), any(), any(), any(), any()) } returns 0
Run Code Online (Sandbox Code Playgroud)
我以为allAny()也许可以代替重复使用any(),但当然mockObject.method(allAny())是语法错误,因为参数太少了。
那么有什么用呢allAny()?
Mockk 是一个很棒的库,但是官方文档中的一些示例没有提供原始的模拟类。这会导致歧义。该文档没有多大帮助。
我们假设该类Car有一个方法fun accelerate(fromSpeed: Int, toSpeed: Int)。在这种情况下,使用allAny()参数将给出您提到的语法错误。
但是,如果我们的方法有oraccelerate的默认值,编译器不会抱怨。toSpeedfromSpeed
fun accelerate(fromSpeed: Int, toSpeed: Int = 100) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
让我们进行如下测试。
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
1524 次 |
| 最近记录: |