public void myTesting(){
System.out.println("testing before ");
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
System.out.println("test");
}
}, 100);
System.out.println("testing after ");
}
字符串
我尝试在Kotlin上模拟上面的处理程序代码,使用slot函数返回run()函数
这是我的零钱
mockkStatic(Looper::class)
mockkStatic(Runnable::class)
val looper = mockk<Looper>{
every {
thread
} returns Thread.currentThread()
}
every {
Looper.getMainLooper()
} returns looper
val Handler = mockk<Handler>(relaxed = true)
every {
Handler.postDelayed(capture(slotrunnable) ,100)
} answers {
true
}
slotrunnable.captured.run()
Manager.myTesting()
型
当我运行测试用例时,我正在获取lateinit属性捕获尚未初始化插槽
1条答案
按热度按时间qnakjoqk1#
您的待测系统创建了一个新的数据库:
字符串
但是您的单元测试代码只对特定的mock处理程序使用
every
:型
所以这只适用于特定的mock对象。你可能会被误导,因为你用大写的首字母命名你的对象,和类的名字一样。不要这样做。如果你把它命名为
handler
而不是Handler
,你会注意到你的every
只会影响那个方法,而不是整个类。你应该将一个mock对象传递给你的方法(依赖注入),而不是在方法内部创建它。然后你的单元测试可以将mock对象传递给你的测试方法。