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
スポンサードリンク