MockK - 左侧匹配器的匹配模拟签名失败:[any(), any()]

Bar*_*fet 21 android kotlin android-testing mockk

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

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

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

这是引发错误的测试:

  @Before
  fun setup() {
    mockkObject(WakeUpTimerManager)
    every { WakeUpTimerManager.set(any(), any()) } returns Unit
  }
Run Code Online (Sandbox Code Playgroud)

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)
      )
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

M. *_*cik 12

尝试与mockkStatic(WakeUpTimerManager::class). 对我来说mockkObject也不起作用,但mockkStatic确实

  • 就我而言,情况恰恰相反。在处理“伴随对象”时,我必须使用“mockkObject”而不是“mockkStatic”。 (3认同)

Tho*_*ash 9

就我而言,我使用了错误的注释来模拟依赖项。

当我应该使用@MockBeanfromorg.springframework.boot.test.mock.mockito.MockBean时,我正在使用@MockkBeanfrom com.ninjasquad.springmockk.MockkBean