今回は前回のコードで、テストならではの重要ポイントを書いてみます。
これまでの記事
Android開発でJUnit導入してみる。 その1
http://blog.livedoor.jp/shizuku_kun/archives/51559168.html
Android開発でJUnit導入してみる。 その2 Activityのテスト自動化
テストクラスについて
ActivityInstrumentationTestCase2を継承
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity>
まずActivityをテストする場合はActivityInstrumentationTestCase2を継承します。
最後のクラス型はテスト対象のクラスを(今回はMainActivity)
コンストラクタ
public MainActivityTest() {
super("jp.example.mainactivity", MainActivity.class);
}
引数なしのコンストラクタを作ります。
スーパークラスのコンストラクタを実行。
引数はテスト対象クラスのパッケージ名とクラスインスタンスです。
Instrumentation
こんなのがあります。
JUnit使うまで見たことなかったです!
private Instrumentation instrumentation;
これを使うことによって、操作のテストが自動化出来るようになります。
詳しい説明は公式にあるのですが、これはアプリケーションよりも先にインスタンス化され、Androidとアプリケーションのやりとりをモニタリングすることが可能です。
Instrumentation | Android Developers
http://developer.android.com/reference/android/app/Instrumentation.html
UIスレッドで動かして、処理終了まで待つ
テストとMainActivityの操作は違うスレッドで行われるので、UIスレッドでの処理完了を待つ必要があります。
下のようなコードの部分です。
// 別スレッドでActivityの操作
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
// MainActivityでOnPauseを呼ぶ
instrumentation.callActivityOnPause(activity);
}
});
// Activityの処理終了待ち
instrumentation.waitForIdleSync();
これでActivityのテストが出来ました。
![]() | テスト駆動開発入門 ケント ベック,Kent Beck,長瀬 嘉秀,テクノロジックアート ピアソンエデュケーション 売り上げランキング : 94504 Amazonで詳しく見る |
