我有一个Android应用程序,我试图在Eclipse中使用JUnit进行测试。我创建了一个Android Test项目并添加了一些测试,但是当我尝试在我的设备上运行测试时,每个测试都会在我尝试测试的类上使用java.lang.NoClassDefFoundError失败。
我发现了一些类似的问题,但与我的问题完全不同。最接近的是this,但此用户正在使用Maven并找出使用此方法的解决方法。我没有使用Maven。
以下是LogCat的一些输出:
03-26 13:36:05.281: I/TestRunner(8380): started: testValueOf(com.evertz.android.vlpro.unit.SeverityTest)
03-26 13:36:05.281: I/TestRunner(8380): failed: testValueOf(com.evertz.android.vlpro.unit.SeverityTest)
03-26 13:36:05.281: I/TestRunner(8380): ----- begin exception -----
03-26 13:36:05.281: I/TestRunner(8380): java.lang.NoClassDefFoundError: com.evertz.android.vlpro.Severity
03-26 13:36:05.281: I/TestRunner(8380): at com.evertz.android.vlpro.unit.SeverityTest.testValueOf(SeverityTest.java:19)
03-26 13:36:05.281: I/TestRunner(8380): at java.lang.reflect.Method.invokeNative(Native Method)
03-26 13:36:05.281: I/TestRunner(8380): at java.lang.reflect.Method.invoke(Method.java:511)
03-26 13:36:05.281: I/TestRunner(8380): at junit.framework.TestCase.runTest(TestCase.java:168)
03-26 13:36:05.281: I/TestRunner(8380): at junit.framework.TestCase.runBare(TestCase.java:134)
03-26 13:36:05.281: I/TestRunner(8380): at junit.framework.TestResult$1.protect(TestResult.java:115)
03-26 13:36:05.281: I/TestRunner(8380): at junit.framework.TestResult.runProtected(TestResult.java:133)
03-26 13:36:05.281: I/TestRunner(8380): at junit.framework.TestResult.run(TestResult.java:118)
03-26 13:36:05.281: I/TestRunner(8380): at junit.framework.TestCase.run(TestCase.java:124)
03-26 13:36:05.281: I/TestRunner(8380): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
03-26 13:36:05.281: I/TestRunner(8380): at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
03-26 13:36:05.281: I/TestRunner(8380): at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
03-26 13:36:05.281: I/TestRunner(8380): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
03-26 13:36:05.281: I/TestRunner(8380): ----- end exception -----
03-26 13:36:05.281: I/TestRunner(8380): finished: testValueOf(com.evertz.android.vlpro.unit.SeverityTest)
我有其他使用JUnit测试的Android项目,效果很好。这是一个简短的总结:
所有测试类都使用JUnit3语义(扩展TestCase,没有注释等)。所测试的类都没有基于活动(尚未)。我现在只是测试支持类,这些只有对Android SDK类的小引用(例如android.util.Log,android.graphics.Color)。
我认为有外部依赖可能会以某种方式导致问题,所以我尝试在AppOne和AppOneTest中向Utils类添加一些(不必要的)调用,但这些测试仍然有效。我还尝试删除AppTwoTest中的所有测试,除了没有引用Utils或EasyMock(来自LogCat输出的SeverityTest类)的测试,这仍然失败。
我尝试了干净的构建,重新启动Eclipse,删除并重新创建了AppTwoTest项目,似乎没有任何工作。关于什么可能导致这个问题的任何想法?
答案 0 :(得分:1)
检查测试应用的清单,它应包含以下内容:
测试代码的包定义
使用适合您应用的sdk
在测试运动员中链接的use-library
带有应用代码链接的工具
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test" <!-- package of the test code -->
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.app" /> <!-- package of the app code -->
<application android:allowBackup="false">
<!-- linkage for the test runner -->
<uses-library android:name="android.test.runner" />
</application>