我找不到任何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
的默认值,编译器不会抱怨。toSpeed
fromSpeed
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 次 |
最近记录: |