AndroidのActivityInstrumentationTestCase2でUIをテストしました

2011.08.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ActivityInstrumentationTestCase2というテストケースクラスを使って UIの機能をテストできるみたいなので試しました。

以下はテスト対象になるサンプルアプリです。 ボタンを押すとTextViewに"Hello World!"と表示するだけのアプリです。

◎レイアウト

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
		
	<Button android:id="@+id/button1"
		android:text="Button"	
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content"
		android:onClick="onClick"/>
		
	<TextView android:id="@+id/textView1"
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content"/>
</LinearLayout>

◎アクティビティ

package sample.button;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class SampleButton extends Activity {
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}
	
	public void onClick(View v) {
		TextView textView1 = (TextView) findViewById(R.id.textView1);
		textView1.setText("Hello World!");
	}
}

次はJUnitテストケースを作成になります。 ここでスーパークラスをActivityInstrumentationTestCase2にして下さい。 場所はSampleButtonと同じところに作成しました。 ボタンを押した際にTextViewの文字列が"Hello World!"になるかテストしています。

◎テストクラス

package sample.button;

import android.test.ActivityInstrumentationTestCase2;
import android.widget.Button;
import android.widget.TextView;

public class SampleButtonTest extends
		ActivityInstrumentationTestCase2<SampleButton> {

	private TextView textView1;
	private Button button1;
	
	public SampleButtonTest() {
		super("sample.button", SampleButton.class);
	}
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		button1 = (Button) getActivity().findViewById(R.id.button1);
		textView1 = (TextView) getActivity().findViewById(R.id.textView1);
	}
	
	public void testOnClick() {
		getActivity().runOnUiThread( new Runnable() {
			@Override
			public void run() {
				// ボタンを押す
				button1.performClick();
			}
		});
				
		// 待機する
		getInstrumentation().waitForIdleSync();
				
		// TextViewに表示された文字列を確認する
		assertEquals("Hello World!", textView1.getText());
	}
}

最後にAndroidManifest.xmlを修正します。 uses-libraryタグとinstrumentationタグを追加しています。 それ以外はデフォルトです。 ◎AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="sample.button"
	android:versionCode="1"
	android:versionName="1.0">

	<application android:icon="@drawable/icon"
		android:label="@string/app_name">
		<activity android:name="SampleButton"
			android:label="@string/app_name">
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>

		<uses-library android:name="android.test.runner" />
	</application>
	
	<instrumentation android:name="android.test.InstrumentationTestRunner"
		android:targetPackage="sample.button"/>
</manifest>

準備ができたのでAndroid JUnit Testで起動して下さい。 JUnitビューを開いて以下のように緑のラインが表示されたら成功です。