Java Junit测试中未涉及Runnable内部的方法调用
我正在尝试为我的应用程序添加单元测试,每一件事情都很顺利,当我在runnable中有一个延迟后调用的方法时 测试通过了,但是当我看到覆盖率报告时,它显示这个方法调用没有被覆盖 这是我的演示者中的代码Java Junit测试中未涉及Runnable内部的方法调用,java,android,junit,Java,Android,Junit,我正在尝试为我的应用程序添加单元测试,每一件事情都很顺利,当我在runnable中有一个延迟后调用的方法时 测试通过了,但是当我看到覆盖率报告时,它显示这个方法调用没有被覆盖 这是我的演示者中的代码 view.changeLogo(); handler=new Handler(); new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @Override public
view.changeLogo();
handler=new Handler();
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
view.navigateToLogIn();
}
},5000);
这是我测试中的代码
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
verify(view).navigateToLogIn();
}
},5000);
当我使用Thread.sleep时,唯一能让它工作的方法是,但在这里,我不想阻止UI线程
有什么帮助吗
谢谢问题在于您正在使用系统的实际调度机制。因此,您只需使用Thread.sleep让系统运行执行您的runnable的另一个线程。另一方面,系统调度机制经过了很好的测试,因此您只需要测试您的可运行性。使您的
Runnable
成为一个自己的类,您可以直接实例化和测试run
方法。问题是您使用的是系统的实际调度机制。因此,您只需使用Thread.sleep让系统运行执行您的runnable的另一个线程。另一方面,系统调度机制经过了很好的测试,因此您只需要测试您的可运行性。使您的Runnable
成为一个自己的类,您可以直接实例化和测试run
方法。