在我的仪器测试中,我有一个extends ApplicationTestCase<TestApplication>
TestApplication extends Application
的基类,只是在onCreate()
中执行一些基本的初始化工作。
在一个测试套件中,我正在测试一个通过new Handler();
调用实例化一个新Handler的类。这在应用程序中编译并运行良好,但是,在测试中始终失败:
在Application类中java.lang.RuntimeException:无法在线程内创建处理程序 没有调用Looper.prepare()
,调用:
@Override
public void onCreate() {
super.onCreate();
this.getMainLooper().prepare();
}
没有帮助,因为第一个测试运行正常,后续测试失败
java.lang.RuntimeException:每个线程只能创建一个Looper
并致电
this.getMainLooper().quit()
中的this.getMainLooper().quitSafely()
或onTerminate()
因为看起来同一个线程用于套件中运行的所有测试(也导致上述问题)所以由于问题导致所有测试出错在现场直播中退出Looper。
我可以通过使用静态布尔标志来仅仅运行prepare()一次,但这看起来非常简陋。我应该提交错误,还是代码中的某些内容出错?
提前感谢帮助。
答案 0 :(得分:0)
我有同样的问题。在测试用例中创建一个新线程似乎有效。
final CountDownLatch latch = new CountDownLatch(1);
new Thread() {
@Override
public void run() {
Looper.prepare();
// ...
// Your code here
// ...
latch.countDown();
}
}.start();
latch.await();
assertTrue("Failed to run thread for test", latch.getCount() == 0);