Android JUnit测试ClassNotFoundException [英] Android JUnit testing ClassNotFoundException

查看:126
本文介绍了Android JUnit测试ClassNotFoundException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试设置JUnit来测试我的Android项目的活动。



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

我按照这些网站的步骤(他们或多或少相同,但我仍然检查所有这些,只是为了确保我做的一切正确)

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]启动仪器android.test.InstrumentationTestRunner在设备仿真器-5554

[2012-12- 09 19:43:01 - AssassinTest]收集测试信息

[2012-12-09 19:43:04 - AssassinTest]测试运行失败:由于java.lang.ClassNotFoundException


这里是从LogCat获得的:

 code> 12-09 19:43:02.929:E / dalvikvm(1255):无法解析Ludes / assassi / test / InGameActivityTest;注释类19 
12-09 19:43:02.929:D / AndroidRuntime(1255):关闭VM
12-09 19:43:02.929:W / dalvikvm(1255):threadid = 1:线程退出与未捕获的异常(组= 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):java.lang.reflect.Method.getDeclaredAnnotations(Native Method)
12-09 19:43:02.961:E / AndroidRuntime(1255):java.lang.reflect.Method.getDeclaredAnnotations(Method.java:262)
12-09 19:43:02.961:E / AndroidRuntime(1255):java.lang.reflect.AccessibleObject.getAnnotations(AccessibleObject.java:188)
12-09 19:43:02.961:E / AndroidRuntime(1255):java.lang.reflect。 AccessibleObject.getAnnotation(AccessibleObject.java:196)
12-09 19:43:02.961:E / AndroidRuntime(1255):android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60)
12-09 19:43:02.961:E / AndroidRuntime(1255):android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39)
12-09 19:43:02.961: E / AndroidRuntime(1255):在android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30)
12-09 19:43:02.961:E / AndroidRuntime(1255):在com.android .internal.util.Predicates $ OrPredicate.apply(Predicates.java:106)
12-09 19:43:02.961:E / AndroidRuntime(1255):在android.test.suitebuilder.annotation.HasAnnotation.apply HasAnnotation.java:42)
12-09 19:43:02.961:E / AndroidRuntime(1255):在android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31)
12 -09 19:43:02.961:E / AndroidRuntime(1255):在com.android.internal.util.Predicates $ NotPredicate.apply(Predicates.java:122)
12-09 19:43:02.961:E / AndroidRuntime(1255):在android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:254)
12-09 19:43:02。 961:E / AndroidRuntime(1255):在android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:184)
12-09 19:43:02.961:E / AndroidRuntime(1255):在android.test .InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373)
12-09 19:43:02.961:E / AndroidRuntime(1255):在android.app.ActivityThread.handleBindApplication(ActivityThread.java:3246)
12-09 19:43:02.961:E / AndroidRuntime(1255):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):在android.os.Handler.dispatchMessage(Handler。 java:99)
12-09 19:43:02.961:E / AndroidRuntime(1255):android.os.Looper.loop(Looper.java:130)
12-09 19:43: 02.961:E / AndroidRuntime(1255):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):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):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-09 19:43:02.961:E / AndroidRuntime(1255):在dalvik.system.NativeStart.main(本机方法)
12-09 19:43:02.961:E / AndroidRuntime(1255):引起:java.lang.ClassNotFoundException:装载器dalvik中的org.junit.Test。 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):在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
12 -09 19:43:02.961:E / AndroidRuntime(1255):在java。 lang.ClassLoader.loadClass(ClassLoader.java:551)
12-09 19:43:02.961:E / AndroidRuntime(1255):java.lang.ClassLoader.loadClass(ClassLoader.java:511)
12-09 19:43:02.961:E / AndroidRuntime(1255):... 25更多

在几个论坛上搜索时,我读到这可能是由于一个不良的清单文件造成的,但是我看不到我的错误是什么?

 <?xml version =1.0encoding =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(尚未实现);
}
}

谢谢

解决方案

这可能是因为JUnit不在你的类路径中。转到项目 - >属性 - > Java构建路径 - >订单和导出并检查是否取消选中JUnit框。


I'm trying to setup JUnit to test my activities for an android project.

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)

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-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'

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>

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");
    }
}

Thank you

解决方案

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.

这篇关于Android JUnit测试ClassNotFoundException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆