Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android测试项目找不到应用程序类_Android_Eclipse_Junit - Fatal编程技术网

Android测试项目找不到应用程序类

Android测试项目找不到应用程序类,android,eclipse,junit,Android,Eclipse,Junit,我有一个Android应用程序,我正试图在Eclipse中使用JUnit进行测试。我创建了一个Android测试项目并添加了一些测试,但是当我尝试在我的设备上运行测试时,每个测试都会失败,并且在我尝试测试的类上出现java.lang.NoClassDefFoundError 我发现了一些类似的问题,但与我的问题完全不同。最接近的一个是,但是这个用户正在使用Maven,并使用它找到了一个解决方法。我没有使用Maven 以下是LogCat的一些输出: 03-26 13:36:05.281: I/Te

我有一个Android应用程序,我正试图在Eclipse中使用JUnit进行测试。我创建了一个Android测试项目并添加了一些测试,但是当我尝试在我的设备上运行测试时,每个测试都会失败,并且在我尝试测试的类上出现java.lang.NoClassDefFoundError

我发现了一些类似的问题,但与我的问题完全不同。最接近的一个是,但是这个用户正在使用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)
我还有其他Android项目,使用JUnit测试,效果很好。以下是一个简短的总结:

  • Utils:一个Android库项目,其中包含几个从我现有的Java代码库和Android库复制的实用程序类
  • UtilsTest:Utils项目中类的相应单元测试。具有对easymock.jar的引用。这些测试在设备上运行得非常好
  • AppOne:一款简单的Android应用程序,不依赖于Utils、EasyMock或其他任何东西
  • AppOneTest:AppOne类的单元测试。这些测试运行正常
  • AppTwo:一个依赖于Utils库项目的Android应用程序
  • AppTwoTest:AppTwo类的单元测试。依赖于UTIL和EasyMock。如上所述,所有这些测试都失败(找不到测试中的类)
所有测试类都使用JUnit3语义(扩展TestCase、无注释等)。测试中没有一个类是基于活动的(目前)。我现在只是测试支持类,这些支持类只对Android SDK类进行了少量引用(例如Android.util.Log、Android.graphics.Color)

我认为具有外部依赖可能会以某种方式导致问题,所以我尝试在AppOne和AppOneTest中添加一些(不必要的)对Utils类的调用,但这些测试仍然有效。我还尝试从AppTwoTest中删除所有测试,除了一个没有引用Utils或EasyMock(LogCat输出中的SeverityTest类)的测试,但仍然失败


我尝试了清理构建、重新启动Eclipse、删除并重新创建AppTwoTest项目,但似乎没有任何效果。有没有关于导致此问题的原因的想法?

检查测试应用程序的清单,它应该包含以下内容:

  • 测试代码的包定义

  • 使用适合您的应用程序的sdk

  • 使用在测试运行程序中链接的库

  • 带有应用程序代码链接的检测

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


  • 这把它修好了。我使用了错误的仪器目标包(使用的是测试项目包而不是应用程序)。我想我查过了,但我想我错过了。非常感谢。这是新Gradle构建系统的推荐方法吗?