我在运行模拟测试(使用mockK & Kotlin)时遇到了一个问题。
我做了几次工作单元测试。昨天我正在测试我实现的特性。但是,每当我试图运行测试时,就会出现这样的异常:
io.mockk.MockKException: Failed matching mocking signature for
SignedCall(retValue=, isRetValueMock=true, retType=class kotlin.Unit, self=Observer(#1), method=onChanged(Any), args=[kotlin.Unit], invocationStr=Observer(#1).onChanged(kotlin.Unit))
left matchers: [any()]
at io.mockk.impl.recording.SignatureMatcherDetector.detect(SignatureMatcherDetector.kt:99)
at io.mockk.impl.recording.states.RecordingState.signMatchers(RecordingState.kt:39)
at io.mockk.impl.recording.states.RecordingState.round(RecordingState.kt:31)
此外,如果我试图运行带有覆盖率的测试,android会记录这些错误:
[2021.08.24 12:05:30] (Coverage): Error during class instrumentation: kotlin.text.Regex: java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 14
[2021.08.24 12:05:31] (Coverage): Error during class instrumentation: kotlin.text.StringsKt___StringsKt: java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 14
[2021.08.24 12:05:31] (Coverage): Error during class instrumentation: kotlin.text.StringsKt__StringsKt: java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 14
[2021.08.24 12:05:31] (Coverage): Error during class instrumentation: kotlin.text.StringsKt__StringsJVMKt: java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 14
[2021.08.24 12:05:31] (Coverage): Error during class instrumentation: kotlin.text.StringsKt__StringNumberConversionsJVMKt: java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 14
代码只是一个简单的调用检查,下面是一个示例:
@Test
fun onLoginButtonPressed() {
// Arrange
val tObserver: Observer<Unit> = mockk(relaxUnitFun = true)
viewModel.launchLoginScreenEvent.observeForever(tObserver)
// Act
viewModel.onLoginButtonPressed()
// Assert
verify(exactly = 1) { tObserver.onChanged(any()) }
}
我不知道这两个问题是否相关,但在我的情况下它们是一起发生的。
Kotlin版本: 1.4.31 Android Studio: 4.2 (从北极福克斯回滚)
发布于 2022-06-08 21:24:52
我偶尔会遇到这样的情况:
any()
对象具有抽象类型参数。MyObject<T>
,与调用any<MyObject<T>>()
相同)解决方案
verify { mock.method(any<T>()) }
)https://stackoverflow.com/questions/68904766
复制相似问题