この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Androidアプリのテストコードを書いてみました。
今回は画面遷移に関するテストコードです。
事前にunitテストの環境を準備する必要があります。
下記などを参考にさせて頂きました。
■ Activityコード
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout contentView = getContentView();
setContentView(contentView);
}
private LinearLayout getContentView() {
LinearLayout l = new LinearLayout(this);
Button button = new Button(this);
button.setText("ターゲットへ遷移するボタン");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClassName(getApplicationContext(), TargetActivity.class.getName());
startActivity(intent);
}
});
l.addView(button);
return l;
}
}
■ テストコード
/**
*
* ActivityInstrumentationTestCase2を継承したクラスを作成する
* テストするクラスを指定する(MainActivity)
*
*/
public class MainActivityTest extends ActivityInstrumentationTestCase2<mainactivity> {
/**
* 次の画面へ遷移するためのボタン
*/
private Button button;
/**
* コンストラクタ
* テストするクラスを指定する(MainActivity)
*/
public MainActivityTest() {
super("MainActivityTest",MainActivity.class);
}
/**
* テスト前の準備
*/
@Override
protected void setUp() throws Exception {
super.setUp();
/**
* Buttonを取得しておく
*/
button = (Button) getActivity().findViewById(1);
}
public void testOnClick() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
/**
* 遷移先のクラスをMonitorにセットする
*/
ActivityMonitor monitor = new ActivityMonitor(TargetActivity.class.getName(), null, true);
getInstrumentation().addMonitor(monitor);
/**
* Buttonをクリックする
* (押せることもテストしておく)
*/
assertTrue(button.performClick());
/**
* 画面遷移したあとのクラスを取得する
*/
Activity next = getInstrumentation().waitForMonitorWithTimeout(monitor, 10);
/**
* Monitorでセットしたクラスと画面遷移したクラスが同じことを検証する
*/
assertEquals(monitor.getHits(), 1);
if ( next != null ) {
/**
*遷移した画面を閉じる
*/
next.finish();
}
}
});
}
}
次は画面遷移以外のテストコードも投稿できればと思ってます。
参考になれば幸いです。