Androidの単体テストは、JUnit をベースとしており、JUnitやCppUnitなどを利用した事がある方にはわかりやすくなってます。Activityをlaunchすることなく テストを行えるのが特徴です。
スポンサードリンク
junitライブラリを使用していることを指定し、「instrumentation」を定義してください。
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app.tests" android:versionCode="1"
android:versionName="1.0">
<application>
<uses-library android:name="android.test.runner" />
</application>
<uses-sdk android:minSdkVersion="3" />
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.sample.app.sampleapp"
android:label="Tests for My App" />
</manifest>
Android.mkには、次のように記載してください。「LOCAL_INSTRUMENTATION_FOR」の指定を忘れないでください。
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) # We only want this apk build for tests. LOCAL_MODULE_TAGS := tests LOCAL_CERTIFICATE := platform LOCAL_JAVA_LIBRARIES := android.test.runner # Include all test java files. LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := SampleJunitTest LOCAL_INSTRUMENTATION_FOR := TargetTestActivity include $(BUILD_PACKAGE)
作成したアプリのテストを行うためのコードです。全てのメソッドは「test」から始まる必要があります。
Android に特有のオブジェクトをテストするための「AndroidTestCase」の基底クラスは TestCase です。
なお、「AndroidTestCase」を継承したクラス全てのテストを実施されるため、別クラスであっても自動的にテストを行なってくれます。
package com.example.app;
import junit.framework.Assert;
import android.test.AndroidTestCase;
public class SomeTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
// 最初に実施したい内容
}
@Override
protected void tearDown() throws Exception {
super.setUp();
// 最後に実施したい内容
}
public void testSomething() throws Throwable {
Assert.assertTrue(1 + 1 == 2);
}
public void testSomethingElse() throws Throwable {
Assert.assertTrue(1 + 1 == 3);
}
}
テストケースの「成功」「失敗」の評価にはassertメソッドを利用します。
スポンサードリンク
| メソッド | 内容 |
|---|---|
| assertEquals(arg1, arg2) | arg1とarg2が同じ値かどうか判別します。違う場合はFailure(失敗)になります。基本型、オブジェクト型の両方を判別できます。 |
| assertEquals(msg, arg1, arg2) | arg1とarg2が同じ値かどうか判別します。値が違う場合はメッセージとしてmsgを表示します。 |
| assertTrue(boolean) | 引数がtrueかどうか判別します。falseの場合はFailure(失敗)になります。 |
| assertTrue(String, boolean) | 引数がtrueかどうか判別します。falseの場合はメッセージとしてStringの値を表示します。 |
| assertFalse(boolean) | 引数がfalseかどうか判別します。trueの場合はFailure(失敗)になります。 |
| assertFalse(String, boolean) | 引数がfalseかどうか判別します。trueの場合はメッセージとしてStringの値を表示します。 |
| assertNotNull(Object) | 引数がNullでないか判別します。Nullだった場合はFailure(失敗)になります。 |
| assertNotNull(String, Object) | 引数がNullでないか判別します。Nullだった場合はメッセージとしてStringの値を表示します。 |
| assertNull(Object) | 引数がNullかどうか判別します。Nullでなかった場合はFailure(失敗)になります。 |
| assertNull(String, Object) | 引数がNullかどうか判別します。Nullでなかった場合はメッセージとしてStringの値を表示します。 |
| assertSame(Object1, Object2) | Object1とObject2が同じオブジェクトを参照しているかどうか判別します。同じオブジェクトでなかった場合はFailure(失敗)になります。 |
| assertSame(String, Object1, Object2) | Object1とObject2が同じオブジェクトを参照しているかどうか判別します。同じオブジェクトでなかった場合はメッセージとしてStringの値を表示します。 |
| assertNotSame(Object1, Object2) | Object1とObject2が同じオブジェクトを参照していないかどうか判別します。同じオブジェクトだった場合はFailure(失敗)になります。 |
| assertNotSame(String, Object1, Object2) | Object1とObject2が同じオブジェクトを参照していないかどうか判別します。同じオブジェクトだった場合はメッセージとしてStringの値を表示します。 |
| fail( ) | 強制的にFailure(失敗)になります。 |
| fail(String) | 強制的にFailure(失敗)になります。Failure(失敗)だった場合は、メッセージとしてStringの値を表示します。 |
Eclipse を利用して JUnit を起動してください。
次のコマンドを入力するとテストが開始されます。
adb shell am instrument -w com.example.app.tests/android.test.InstrumentationTestRunner
com.example.app.tests:.. Failure in testSomethingElse: Test results for InstrumentationTestRunner=...F Time: 0.02 FAILURES!!! Tests run: 3, Failures: 1, Errors: 0
android.util.AndroidException: INSTRUMENTATION_FAILED: com.example.app.tests/android.test.InstrumentationTestRunnerINSTRUMENTATION_STATUS: id=ActivityManagerService INSTRUMENTATION_STATUS: Error=Unable to find instrumentation target package: com.sample.app.sampleapp INSTRUMENTATION_STATUS_CODE: -1
スポンサードリンク