安卓的JUnit测试ClassNotFoundException的 [英] Android JUnit testing ClassNotFoundException
问题描述
我试图安装的JUnit测试我的活动,为的Android项目。
I'm trying to setup JUnit to test my activities for an android project.
在Android项目(还剩下还有一些错误,这就是为什么我要添加一些单元测试)运行OK双方的AVD和设备
The Android Project runs ok on both an AVD and a device (there are still a few bugs left, which is why I want to add a few unit tests)
我跟着从这些网站中的步骤(他们都或多或少相同的,但我还是检查所有的人都只是为了确保我正确地做了一切)
<一href="http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/">http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/
<一href="http://developer.android.com/tools/testing/testing_eclipse.html">http://developer.android.com/tools/testing/testing_eclipse.html
I followed the steps from these websites (they are more or less the same, but I still checked all of them just to make sure I did everything correctly)
http://mobile.tutsplus.com/tutorials/android/android-sdk-junit-testing/
http://developer.android.com/tools/testing/testing_eclipse.html
我创建使用相同的工作空间作为我的项目的测试项目,并建立了我的第一个测试用例。当我试图运行测试,我得到了以下内容:
I created a test project using the same workspace as my project, and created my first test case. When I tried to run the test, I got the following:
[2012年12月9日19时42分56秒 - AssassinTest]!Android的推出
[2012年12月9日19时42分56秒 - AssassinTest]亚洲开发银行正常运行
。
[2012年12月9日19时42分56秒 - AssassinTest]执行android.test.InstrumentationTestRunner JUnit启动
[2012年12月9日19时42分56秒 - AssassinTest]自动目标模式:preferred AVDGoogle_Level10可在模拟器模拟器-5554
[2012年12月9日19时42分56秒 - AssassinTest]上传AssassinTest.apk到器件的模拟器,5554'
[2012年12月9日19时42分57秒 - AssassinTest]安装AssassinTest.apk ...
[2012年12月9日19点42分59秒 - AssassinTest]!成功
[2012年12月9日19点42分59秒 - AssassinTest]项目依赖发现,安装:刺客
[2012年12月9日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
[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中获得:
And here is what I get from 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
在搜索上的几个论坛,我读了这可能是由坏的清单文件造成的,但我看不出有什么不对我的
While searching on a few forums, I read that this might be caused by a bad manifest file, but I don't see what is wrong with mine
<?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>
最后,这是code。在我唯一的JUnit类(到目前为止)
And finally, this is the code in my only JUnit class (so far)
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");
}
}
感谢您
推荐答案
这可能是因为JUnit是不是在你的类路径中。转到项目 - &GT;属性 - &GT; Java构建路径 - &GT;订单和出口
,并检查了JUnit选中该复选框。
It is probably because JUnit is not in your classpath. Go to Project -> Properties -> Java Build Path -> Order and Export
and check if the JUnit box is unchecked.
这篇关于安卓的JUnit测试ClassNotFoundException的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!