Android JUnit测试ClassNotFoundException

前端之家收集整理的这篇文章主要介绍了Android JUnit测试ClassNotFoundException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试设置JUnit来测试我的 android项目活动.

Android项目在AVD和设备上都运行正常(还有一些bug,这就是为什么我要添加一些单元测试)

我按照这些网站的步骤(它们或多或少相同,但我仍然检查所有这些只是为了确保我做的一切正确)
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 Launch!
[2012-12-09 19:42:56 – AssassinTest] adb is running normally.
[2012-12-09 19:42:56 – AssassinTest] Performing android.test.InstrumentationTestRunner JUnit launch
[2012-12-09 19:42:56 – AssassinTest] Automatic Target Mode: Preferred AVD ‘Google_Level10′ is available on emulator ’emulator-5554′
[2012-12-09 19:42:56 – AssassinTest] Uploading AssassinTest.apk onto device ’emulator-5554′
[2012-12-09 19:42:57 – AssassinTest] Installing AssassinTest.apk…
[2012-12-09 19:42:59 – AssassinTest] Success!
[2012-12-09 19:42:59 – AssassinTest] Project dependency found,installing: Assassin
[2012-12-09 19:43:01 – Assassin] Application already deployed. No need to reinstall.
[2012-12-09 19:43:01 – AssassinTest] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554
[2012-12-09 19:43:01 – AssassinTest] Collecting test information
[2012-12-09 19:43:04 – AssassinTest] Test run Failed: Instrumentation run Failed due to ‘java.lang.ClassNotFoundException’

这是我从LogCat得到的:

  1. 12-09 19:43:02.929: E/dalvikvm(1255): Unable to resolve Ludes/assassi/test/InGameActivityTest; annotation class 19
  2. 12-09 19:43:02.929: D/AndroidRuntime(1255): Shutting down VM
  3. 12-09 19:43:02.929: W/dalvikvm(1255): threadid=1: thread exiting with uncaught exception (group=0x40015560)
  4. 12-09 19:43:02.961: E/AndroidRuntime(1255): FATAL EXCEPTION: main
  5. 12-09 19:43:02.961: E/AndroidRuntime(1255): java.lang.NoClassDefFoundError: org.junit.Test
  6. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.getDeclaredAnnotations(Native Method)
  7. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:262)
  8. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:188)
  9. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.AccessibleObject.getAnnotation(AccessibleObject.java:196)
  10. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60)
  11. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39)
  12. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30)
  13. 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106)
  14. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42)
  15. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31)
  16. 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122)
  17. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:254)
  18. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
  19. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373)
  20. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3246)
  21. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.access$2200(ActivityThread.java:117)
  22. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969)
  23. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.os.Handler.dispatchMessage(Handler.java:99)
  24. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.os.Looper.loop(Looper.java:130)
  25. 12-09 19:43:02.961: E/AndroidRuntime(1255): at android.app.ActivityThread.main(ActivityThread.java:3683)
  26. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.invokeNative(Native Method)
  27. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.reflect.Method.invoke(Method.java:507)
  28. 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  29. 12-09 19:43:02.961: E/AndroidRuntime(1255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  30. 12-09 19:43:02.961: E/AndroidRuntime(1255): at dalvik.system.NativeStart.main(Native Method)
  31. 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]
  32. 12-09 19:43:02.961: E/AndroidRuntime(1255): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
  33. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
  34. 12-09 19:43:02.961: E/AndroidRuntime(1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
  35. 12-09 19:43:02.961: E/AndroidRuntime(1255): ... 25 more

在几个论坛上搜索时,我读到这可能是由于一个糟糕的清单文件引起的,但我没有看到我的错误.

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="udes.assassin.test"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk android:minSdkVersion="10" />
  8.  
  9. <instrumentation
  10. android:name="android.test.InstrumentationTestRunner"
  11. android:targetPackage="udes.assassin" />
  12.  
  13. <application
  14. android:icon="@drawable/ic_launcher"
  15. android:label="@string/app_name" >
  16. <uses-library android:name="android.test.runner" />
  17. </application>
  18. </manifest>

最后,这是我唯一的JUnit类中的代码(到目前为止)

  1. package udes.assassin.test;
  2. import static org.junit.Assert.*;
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. import udes.assassin.InGameActivity;
  6. import android.test.ActivityInstrumentationTestCase2;
  7.  
  8. public class InGameActivityTest
  9. extends ActivityInstrumentationTestCase2<InGameActivity> {
  10.  
  11. public InGameActivityTest() {
  12. super("udes.assassin",InGameActivity.class);
  13. }
  14.  
  15. public InGameActivityTest(Class<InGameActivity> activityClass) {
  16. super(activityClass);
  17. }
  18.  
  19. @Before
  20. protected void setUp() throws Exception {
  21. super.setUp();
  22. }
  23.  
  24. @Test
  25. public void testSetItemPosition() {
  26. fail("Not yet implemented");
  27. }
  28. }

谢谢

解决方法

这可能是因为JUnit不在您的类路径中.转到项目 – >属性 – > Java构建路径 – > Order and Export并检查是否取消选中JUnit框.

猜你在找的Android相关文章