私はAndroidアプリのUIテストを行うためにEspressoを使用しています。エスプレッソルールを使用しているときに、アクティビティのfinish()メソッドでUIを操作できませんか?
公式ガイドの後、私はActivityTestRuleを使ってテスト中のアクティビティを起動しました。しかし、テストが終了すると、クラッシュが発生しました。
スタックトレースが
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6247)
at android.view.ViewRootImpl.playSoundEffect(ViewRootImpl.java:5222)
at android.view.View.playSoundEffect(View.java:17876)
at android.view.View.performClick(View.java:4755)
at com.example.android.activityinstrumentation.ReadExternalFileActivity.finish(ReadExternalFileActivity.java:196)
at android.support.test.rule.ActivityTestRule.finishActivity(ActivityTestRule.java:234)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:259)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)
は、コールスタックをスローですが、私はAndroidJunitRunnerがクラッシュを引き起こした非UIスレッドから活動の仕上がりを()を呼び出すことを試みました。
My appアクティビティのメソッドfinish()をオーバーライドし、ユーザー確認の終了を確認するダイアログをポップアップします。これはUIスレッドで実行する必要があります。
Espressoを使用しているときに、アクティビティのfinish()メソッドでUI作業を行うことはできませんか?それとも、これはエスプレッソのバグですか?
悲しいことに、Androidの公式ドキュメントには書かれていません。見て、私は何年もメソッドの仕上げを誤っていました。 – cmoaciopm
finish()への呼び出しに関連するイベントの正確な順序が定義されていない場合、またはsuper.finish()の呼び出しをメソッドの最後に移動してこの問題を回避できる場合でも、私は全く驚くことはありませんそれに頼ることはお勧めできません。 – JoeHz