在ApplicationTestCase中的主线程上创建一个新的Handler

时间:2015-06-12 00:46:56

标签: android testing handler android-instrumentation

在我的仪器测试中,我有一个extends ApplicationTestCase<TestApplication> TestApplication extends Application的基类,只是在onCreate()中执行一些基本的初始化工作。

在一个测试套件中,我正在测试一个通过new Handler();调用实例化一个新Handler的类。这在应用程序中编译并运行良好,但是,在测试中始终失败:

  

java.lang.RuntimeException:无法在线程内创建处理程序   没有调用Looper.prepare()

在Application类中

,调用:

 @Override
    public void onCreate() {
        super.onCreate();
        this.getMainLooper().prepare();
  }

没有帮助,因为第一个测试运行正常,后续测试失败

  

java.lang.RuntimeException:每个线程只能创建一个Looper

并致电 this.getMainLooper().quit()中的this.getMainLooper().quitSafely()onTerminate()因为看起来同一个线程用于套件中运行的所有测试(也导致上述问题)所以由于问题导致所有测试出错在现场直播中退出Looper。

我可以通过使用静态布尔标志来仅仅运行prepare()一次,但这看起来非常简陋。我应该提交错误,还是代码中的某些内容出错?

提前感谢帮助。

1 个答案:

答案 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);