gpt4 book ai didi

android - io.mockk.MockKException : Failed matching mocking signature for SignedCall

转载 作者:行者123 更新时间:2023-12-04 23:49:49 82 4
gpt4 key购买 nike

我在运行模拟测试时遇到了问题(使用 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 studio 会记录以下错误:
[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(从北极狐回滚)

最佳答案

我偶尔遇到的可能情况:

  • 你是 verifying an object instead of a mock/spy
  • 内部 onChanged might be hitting an inlined function或者在其他情况下是内联函数本身
  • any()被请求的对象有一个抽象类型参数。
  • (即 MyObject<T> 与调用 any<MyObject<T>>() 相同)

  • 解决方案
  • 确保正确调用模拟或 spy 对象
  • 没办法解决
  • 如果可能,调整您的生产代码以直接访问 T。
  • (即 verify { mock.method(any<T>()) } )
  • 关于android - io.mockk.MockKException : Failed matching mocking signature for SignedCall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68904766/

    82 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com