2012-12-10 141 views
6

我想設置JUnit來測試我的Android項目的活動。Android的JUnit測試ClassNotFoundException

Android的項目運行在一個AVD和設備OK(還留有仍然有一些錯誤,這就是爲什麼我要添加一些單元測試)

我跟着從這些網站中的步驟(他們或多或少是相同的,但我還是檢查所有的人只是爲了確保我做正確的一切)
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'是可用仿真器'仿真器-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]發現項目依賴關係,安裝:刺客
[2012-12-09 19:43:01 - 刺客]應用已經部署。無需重新安裝。
[2012年12月9日19時43分01秒 - AssassinTest]在設備啓動儀表android.test.InstrumentationTestRunner模擬器-5554
[2012年12月9日19時43分01秒 - AssassinTest]收集測試信息
[ 2012年12月9日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"); 
    } 
} 

謝謝

回答

14

這可能是因爲JUnit不在你的類路徑中。轉到Project -> Properties -> Java Build Path -> Order and Export並檢查JUnit框是否未選中。

0

同樣的錯誤,在這裏,其他原因......

我的測試類是一個匿名包裹,但它與AndroidManifest inconistent。XML:

<instrumentation 
     android:name="android.test.InstrumentationTestRunner" 
     android:targetPackage="micharg.nameanimalthing" /> 
2

我注意到,您正在使用@Test註解:

@Test 
public void testSetItemPosition() { 
    fail("Not yet implemented"); 
} 

這是由junit4介紹,基於Android的junt3測試。請參見here

您應該刪除@Test註釋。

相關問題