0

在我的 Instrumentation Tests 中,我有一个基类,它extends ApplicationTestCase<TestApplication> TestApplication extends Application只是在onCreate().

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

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

在 Application 类中,调用:

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

也无济于事,因为第一个测试运行良好,后续测试失败

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

并调用 this.getMainLooper().quit()or this.getMainLooper().quitSafely()inonTerminate()似乎相同的线程用于套件中运行的所有测试(也导致上述问题),因此由于在活动线程上退出 Looper 的问题,所有测试都会出错。

我可以通过使用静态布尔标志只运行一次 prepare() 来解决这个问题,但这看起来非常笨拙。我应该提交一个错误,还是代码中有什么地方做错了?

提前感谢帮助。

4

1 回答 1

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);
于 2015-06-27T00:23:23.763 回答