今回は前回のコードで、テストならではの重要ポイントを書いてみます。

これまでの記事

Android開発でJUnit導入してみる。 その1

http://blog.livedoor.jp/shizuku_kun/archives/51559168.html

Android開発でJUnit導入してみる。 その2 Activityのテスト自動化

http://blog.livedoor.jp/shizuku_kun/archives/51566264.html

テストクラスについて

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で詳しく見る