ио.мок.Исключение MockKException: Не удалось сопоставить насмешливую подпись для подписанного вызова

#android #kotlin #code-coverage #mockk

Вопрос:

Я столкнулся с проблемой при запуске издевательских тестов (с использованием mockK amp; 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: 4.2 (Откат от Arctic Fox)

Комментарии:

1. Вы нашли ответ?

2. Нет, я этого не делал.