我想实现一些UI测试,以确保今天实现的代码在明天也能工作,但是当我试图查看过去已经实现的UI测试是否工作时,它抛出了这个错误:
第一个月
这发生在every {} return Unit
行,该行有一个名为WakeUpTimeManager的对象文件,该文件**调用.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会抛出这个错误?这是怎么回事?有什么解决方案吗?
4条答案
按热度按时间nfeuvbwi1#
尝试使用
mockkStatic(WakeUpTimerManager::class)
。对我来说,mockkObject
也不工作,但mockkStatic
工作uhry853o2#
在我的例子中,我使用了错误的注解来模拟依赖关系。
我从
org.springframework.boot.test.mock.mockito.MockBean
使用@MockBean
,而我应该从com.ninjasquad.springmockk.MockkBean
使用@MockkBean
。thigvfpy3#
在我的例子中,我对
any()
使用了类型转换。我想测试方法viewModel.show(Message())
是否被调用。但是这个方法被重载了(有不同类型的签名),所以我尝试将参数any()
转换为Message
。也许对
message
的嘲笑会有所帮助,但不是在我的情况下。我必须添加
mockkStatic
,因为我使用了扩展方法。例如,fun ViewExtension.show()
:然后模拟behaviour:
nnvyjq4y4#
有时候,尤其是在Dagger Hilt和全局测试模块中,它们会用Mockk模拟来替换对象示例,所以我们并不清楚是模拟对象还是真实的对象。对我来说,就是这样--我缺少了一个依赖项,所以真实示例没有被模拟对象替换,所以mockk回答了这个非常奇怪的错误: