Android計装テストの方向変更を強制するにはどうすればよいですか?
質問
ActivityStrumentationTestCase2クラスを使用して、アプリケーションの受け入れテストをいくつか書いています。多くのことが起こるように、テスト内からオリエンテーションの変更を引き起こしたいと思います。これらの中には、アクティビティ状態が保存されることを保証していますが、方向に適したレイアウトが使用されるようにしたいと思います。
OnSaveinstancestate/onrestoreInstancestate/onPause/onresume/etcを単にテストできることを知っています。インスタンス状態が保持されることを確認する方法。しかし、私は実際にオリエンテーション変更イベントを引き起こすメカニズムがあるのだろうかと思っていましたか?
これには、デバイス/エミュレーターをだまして回転したと思わせるために、何らかのモーションイベントを注入することが含まれますか、それとも計装によって提供される実際の方法はありますか?
ありがとう&歓声!
解決
実際にこれにロボチウムを使用する必要はありません。実際、ロボチウムのソースを見ると、電話したときにすべてのことをしています
solo.setActivityOrientation(Solo.LANDSCAPE);
は
myActivity = this.getActivity(); // In your setUp method()
...
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
他のヒント
アンドリュークが書いたように、あなたは使えることができます
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
assertTrue(...);
オリエンテーションの変更を要求します。しかし、回転自体は非同期で実行されます。実際に状態をテストする 後 オリエンテーションの変更リクエストの少し後に待つ必要があります:
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Thread.sleep(50); // depends on performance of the testing device/emulator
assertTrue(...);
ロボチウムを使用してください。 Soloというクラスがあります。これを使用して、メソッドを呼び出すだけでオリエンテーションを変更できます。
solo.setActivityOrientation(Solo.LANDSCAPE);
それでおしまい!あなたのオリエンテーションは変わります。 Google RobotiumをGoogleで入手して、テストプロジェクトに追加できます。 Robotiumサイトは、AndroidのNotepadアプリ(Android SDKを使用したサンプルプロジェクトとして利用可能)のテストプロジェクトの例を提供します。