首页 > 解决方案 > MockK - 左匹配器的匹配模拟签名失败:[any(), any()]

问题描述

我想实现一些 UI 测试以确保今天实现的代码明天可以使用,但是当尝试查看过去实现的 UI 测试是否有效时,它会抛出此错误:

Caused by: io.mockk.MockKException: Failed matching mocking signature for left matchers: [any(), any()]

这发生在有一个名为 WakeUpTimeManager 的对象文件every {} return Unit的行上,该文件调用一个 .set(param1, param2)函数,并且在该函数内部有一些内联函数,我认为这可能会导致问题,但我不知道。我尝试在互联网上搜索,但找不到解决方案。

这是引发错误的测试:

  @Before
  fun setup() {
    mockkObject(WakeUpTimerManager)
    every { WakeUpTimerManager.set(any(), any()) } returns Unit
  }

这是every在线调用的函数

  fun set(context: Context, timer: Timer) {
    if (timer.atMillis < System.currentTimeMillis()) {
      return
    }

    if (Preset.findByID(context, timer.presetID) == null) {
      return
    }

    //This is an inline function
    withGson {
      PreferenceManager.getDefaultSharedPreferences(context).edit {
        putString(PREF_WAKE_UP_TIMER, it.toJson(timer))
      }
    }

    //This is an inline function
    withAlarmManager(context) {
      it.setAlarmClock(
        AlarmManager.AlarmClockInfo(timer.atMillis, getPendingIntentForActivity(context)),
        getPendingIntentForService(context, timer)
      )
    }
  }

问题:为什么 mockk 会抛出这个错误?这是怎么回事?有什么解决办法吗?

标签: androidkotlinandroid-testingmockk

解决方案


尝试使用mockkStatic(WakeUpTimerManager::class). 对我来说mockkObject也没有工作,但mockkStatic确实


推荐阅读