私のインストルメンテーション テストでは、.NET で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: スレッドごとに作成できるルーパーは 1 つだけです
スイート
で実行されるすべてのテストに同じスレッドが使用されているように見えるため (上記の問題も引き起こします)、ライブスレッドでルーパーを終了する問題により、すべてのテストでエラーが発生しますthis.getMainLooper().quit()
。this.getMainLooper().quitSafely()
onTerminate()
静的ブール値フラグを使用して prepare() を 1 回だけ実行することで、これを回避できますが、これは信じられないほどぎこちないようです。バグを送信する必要がありますか、それともコードに何か問題がありますか?
事前に助けに感謝します。