Android プロジェクトのアクティビティをテストするために JUnit をセットアップしようとしています。
Android プロジェクトは、AVD とデバイスの両方で正常に動作します (まだいくつかのバグが残っているため、いくつかの単体テストを追加する必要があります)
これらのWebサイトの手順に従いました(それらは多かれ少なかれ同じですが、すべてを正しく実行したことを確認するためにすべてをチェックしました)
http://mobile.tutsplus.com/tutorials/android/android-sdk- junit-testing/
http://developer.android.com/tools/testing/testing_eclipse.html
プロジェクトと同じワークスペースを使用してテスト プロジェクトを作成し、最初のテスト ケースを作成しました。テストを実行しようとすると、次の結果が得られました。
[2012-12-09 19:42:56 - AssassinTest] Android ローンチ!
[2012-12-09 19:42:56 - AssassinTest] adb は正常に実行されています。
[2012-12-09 19:42:56 - AssassinTest] android.test.InstrumentationTestRunner JUnit の起動を実行しています
[2012-12-09 19:42:56 - AssassinTest] 自動ターゲット モード: 優先 AVD 'Google_Level10' はエミュレーターで利用可能です ' emulator-5554'
[2012-12-09 19:42:56 - AssassinTest] AssassinTest.apk をデバイス 'emulator-5554' にアップロードしています
[2012-12-09 19:42:57 - AssassinTest] AssassinTest.apk をインストールしています...
[2012-12-09 19:42:59 - AssassinTest] 成功!
[2012-12-09 19:42:59 - AssassinTest] プロジェクトの依存関係が見つかりました。インストール中: Assassin
[2012-12-09 19:43:01 - Assassin] アプリケーションは既に展開されています。再インストールする必要はありません。
[2012-12-09 19:43:01 - AssassinTest] デバイス emulator-5554 でインストルメンテーション android.test.InstrumentationTestRunner を起動しています
[2012-12-09 19:43:01 - AssassinTest] テスト情報を収集しています
[2012-12-09 19 :43:04 - AssassinTest] テストの実行に失敗しました:「java.lang.ClassNotFoundException」が原因でインストルメンテーションの実行に失敗しました
LogCat から取得したものは次のとおりです。
12-09 19:43:02.929: E/dalvikvm(1255): Unable to resolve Ludes/assassi/test/InGameActivityTest; annotation class 19
12-09 19:43:02.929: D/AndroidRuntime(1255): Shutting down VM
12-09 19:43:02.929: W/dalvikvm(1255): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-09 19:43:02.961: E/AndroidRuntime(1255): FATAL EXCEPTION: main
12-09 19:43:02.961: E/AndroidRuntime(1255): java.lang.NoClassDefFoundError: org.junit.Test
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.getDeclaredAnnotations(Native Method)
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:262)
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:188)
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.AccessibleObject.getAnnotation(AccessibleObject.java:196)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30)
12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31)
12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:254)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3246)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.access$2200(ActivityThread.java:117)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.os.Handler.dispatchMessage(Handler.java:99)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.os.Looper.loop(Looper.java:130)
12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.invokeNative(Native Method)
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.invoke(Method.java:507)
12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-09 19:43:02.961: E/AndroidRuntime(1255): at dalvik.system.NativeStart.main(Native Method)
12-09 19:43:02.961: E/AndroidRuntime(1255): Caused by: java.lang.ClassNotFoundException: org.junit.Test in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/system/framework/android.test.runner.jar:/data/app/udes.assassin.test-1.apk:/data/app/udes.assassin-2.apk]
12-09 19:43:02.961: E/AndroidRuntime(1255): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
12-09 19:43:02.961: E/AndroidRuntime(1255): ... 25 more
いくつかのフォーラムを検索しているときに、これは不適切なマニフェスト ファイルが原因である可能性があることを読みましたが、何が問題なのかわかりません
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="udes.assassin.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="udes.assassin" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<uses-library android:name="android.test.runner" />
</application>
</manifest>
そして最後に、これは私の唯一の JUnit クラスのコードです (これまでのところ)
package udes.assassin.test;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import udes.assassin.InGameActivity;
import android.test.ActivityInstrumentationTestCase2;
public class InGameActivityTest
extends ActivityInstrumentationTestCase2<InGameActivity> {
public InGameActivityTest() {
super("udes.assassin", InGameActivity.class);
}
public InGameActivityTest(Class<InGameActivity> activityClass) {
super(activityClass);
}
@Before
protected void setUp() throws Exception {
super.setUp();
}
@Test
public void testSetItemPosition() {
fail("Not yet implemented");
}
}
ありがとうございました