Android JUnit テスト ケースで異常な動作が見られます。このテスト ケースは、単純な電卓アプリケーションのアクティビティ状態管理をテストするためのものです。これが私のテストケースの想定です。
- 起動アクティビティ (セットアップで完了)
- UI 要素への参照を取得します (セットアップで実行)
- ボタンを押して TextView に何かを書き込みます
- Activity の向きを変更して再作成し、TextView のテキストを消去する
- テキストビューがクリーンであることを確認する
ステップ5でエミュレーターに表示されている間、アクティビティのTextViewには空のテキストフィールドが表示されますが、Junitテストコードでは、TextView.getText()を実行すると、向きを変更する前に入力された古い値が返されます。
これが私のテストケースコードです。アクティビティが再作成され、onSaveInstanceState()/onRestoreInstanceState() によってアクティビティの状態を管理していないため、最後のアサーションは失敗するはずです。
public void testOrientationState(){
mActivity.runOnUiThread(new Runnable(){
@Override
public void run() {
keypad.get(com.example.simplecalculator.R.id.button7).performClick();
keypad.get(com.example.simplecalculator.R.id.button9).performClick();
}
});
CharSequence beforeOrientationChange = display.getText();
assertEquals(beforeOrientationChange,"79");
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
getInstrumentation().waitForIdleSync();
CharSequence afterOrientationChange= (CharSequence) ((TextView)mActivity.findViewById(com.example.simplecalculator.R.id.textView)).getText();
assertEquals(beforeOrientationChange,afterOrientationChange);
}