测试运行失败:由于'java.lang.ClassNotFoundException'导致仪表运行失败

时间:2013-04-16 20:29:45

标签: android eclipse android-testing

这是我第一次设置Android测试项目来测试Android项目。

我已经创建了一个非常基本的测试用例,我试图让它运行,但是我没有运行。我得到Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'

我会更麻烦这一点,但是我没有得到任何更多的信息,例如它试图找到哪个类,等等。关于如何从错误中获取更多信息的任何想法?我应该看看的任何常见区域,或者我可能需要配置的任何东西?

以下是来自控制台的信息:

[2013-04-16 13:21:49 - XyzProgramTest] Android Launch!
[2013-04-16 13:21:49 - XyzProgramTest] adb is running normally.
[2013-04-16 13:21:49 - XyzProgramTest] Performing android.test.InstrumentationTestRunner JUnit launch
[2013-04-16 13:21:49 - XyzProgramTest] Automatic Target Mode: launching new emulator with compatible AVD 'GalaxyNexusAPI_17'
[2013-04-16 13:21:49 - XyzProgramTest] Launching a new emulator with Virtual Device 'GalaxyNexusAPI_17'
[2013-04-16 13:21:53 - Emulator] extension WGL_ARB_make_current_read was not found
[2013-04-16 13:21:53 - Emulator] extension WGL_EXT_swap_control was not found
[2013-04-16 13:21:53 - Emulator] Failed to create pbuf surface for FB 0x3004
[2013-04-16 13:21:53 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
[2013-04-16 13:21:54 - XyzProgramTest] New emulator found: emulator-5554
[2013-04-16 13:21:54 - XyzProgramTest] Waiting for HOME ('android.process.acore') to be launched...
[2013-04-16 13:22:55 - XyzProgramTest] HOME is up on device 'emulator-5554'
[2013-04-16 13:22:55 - XyzProgramTest] Uploading XyzProgramTest.apk onto device 'emulator-5554'
[2013-04-16 13:22:55 - XyzProgramTest] Installing XyzProgramTest.apk...
[2013-04-16 13:23:57 - XyzProgramTest] Success!
[2013-04-16 13:23:57 - XyzProgramTest] Project dependency found, installing: XyzProgram
[2013-04-16 13:23:57 - XyzProgram] Uploading XyzProgram.apk onto device 'emulator-5554'
[2013-04-16 13:23:58 - XyzProgram] Installing XyzProgram.apk...
[2013-04-16 13:24:05 - XyzProgram] Success!
[2013-04-16 13:24:05 - XyzProgramTest] Launching instrumentation android.test.InstrumentationTestRunner on emulator-5554
[2013-04-16 13:24:07 - XyzProgramTest] Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'

附加说明

在我的Android测试项目中,我创建了一个简单的测试,其中的软件包类似于我想要在我的Android项目中测试的类。像com.company.android.projectname这样的东西。我已在Android测试项目manifest文件的instrumentation部分中指定了此内容。

<instrumentation
    android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="com.company.android.projectname" />

当我将其更改为匹配时,我收到一条新的错误Test run failed: Unable to find instrumentation target package: com.company.android.projectname

我不是100%确定targetPackage应该是什么,如果我需要为每个我想要测试的软件包需要多个工具,等等。当我将它设置为com.company.android时就是我得到的java.lang.ClassNotFoundException

7 个答案:

答案 0 :(得分:10)

我已升级到androidx库,并开始遇到此错误。

要修复此问题,我在build.gradle中更改了这一行:

testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

答案 1 :(得分:6)

仅供参考我遇到了这个并且不得不添加

<uses-library android:name="android.test.runner"/>

在我的<application/>代码

答案 2 :(得分:5)

找出我的问题并发布答案用于文档目的......

我的问题的根源是两件不同的事情:

  1. 我做了一些重构,这改变了我的位置 android.app.Application课程和我的活动。这就是我的 主要程序没有工作,因为我需要更新我的清单 android project
  2. 在我的Android项目中对我的清单进行更新后,我不得不在我的android test project中进行一些更新,以指向扩展android.app.Application的类的更新位置。
  3. 之后,做了一些清理并再次测试,事情很好。

答案 3 :(得分:5)

在我的情况下,我试图在Jelly Bean模拟器上运行测试。 Android检测似乎不支持Jelly Bean。我可以在棒棒糖上进行测试。

您可能也无法通过发布版本类型运行Android测试。确保调试版本类型处于活动状态。

答案 4 :(得分:1)

我遇到了同样的错误,因为我忘记添加androidx.test:runner测试依赖项。

androidTestImplementation "androidx.test:runner:1.2.0"

答案 5 :(得分:0)

合并后我遇到了这个问题,其中build.gradle指定了错误的测试包,因为我一直在使用默认的。

只需从build.gradle中删除这些行,就可以在默认包中找到必要的类,即src/androidTest

sourceSets {
    instrumentTest.setRoot('src/instrumentTest')
}
//removed this to use the default androidTest source set.

这可能不是确切的解决方案,但希望引导某人朝着正确的方向前进。

答案 6 :(得分:0)

我今天遇到了这个问题,我采用了特定于android的ant build.xml ,它位于“$ {sdk.dir} / tools / ant /”目录下,用于执行所有测试用例在命令行中,但STDOUT向我报告错误,就像你的一样:

vinceMacBook ~/dev/aSQLite+-android/tests$ ant clean uninstall debug install test
...
test:
     [echo] Running tests ...
     [exec] INSTRUMENTATION_RESULT: shortMsg=java.lang.ClassNotFoundException
     [exec] INSTRUMENTATION_RESULT: longMsg=java.lang.ClassNotFoundException:
        android.test.InstrumentationTestRunner
     [exec] INSTRUMENTATION_CODE: 0

我花了一些时间搞清楚这一点,我在根模块的AndroidManifest.xml找到了主要原因,我认为应用程序元素没什么可配置的,所以我省略了它在清单元素中,这导致了我的问题。

我不确定你和我分享相同的结构,所以我在这里发布我的项目结构,也是关键文件的内容,希望可以帮助别人。

vinceMacBook ~/dev/aSQLite+-android$ tree
.
├── AndroidManifest.xml
│       <?xml version="1.0" encoding="utf-8"?>
│       <manifest
│           xmlns:android="http://schemas.android.com/apk/res/android"
│           package="com.vincestyling.asqliteplus"
│           android:versionCode="1"
│           android:versionName="0.1">
│
│           <uses-sdk android:minSdkVersion="8" />
│           
│           <!-- important configuration, cannot be omit even if nothing to say. -->
│           <application />
│
│       </manifest>
│
├── build.xml
│       unchanged, generated by "android create project <project_name>" command.
│
├── project.properties
│       unchanged, generated by "android create project <project_name>" command.
│
├── src
│   └── com
│       └── vincestyling
│           └── asqliteplus
│               ├── DBOperator.java
│               ├── DBOverseer.java
│               └── the library source code lie here...
│
└── tests
    ├── AndroidManifest.xml
    │       <?xml version="1.0" encoding="utf-8"?>
    │       <manifest
    │           xmlns:android="http://schemas.android.com/apk/res/android"
    │           package="com.vincestyling.asqliteplus.tests">
    │
    │           <application>
    │               <uses-library android:name="android.test.runner"/>
    │           </application>
    │
    │           <instrumentation
    │               android:name="android.test.InstrumentationTestRunner"
    │               android:targetPackage="com.vincestyling.asqliteplus"/>
    │
    │       </manifest>
    │
    ├── ant.properties
    │       # [Comments], [Comments], [Comments] which generated by command.
    │       # [Comments], [Comments], [Comments] which generated by command.
    │       # [Comments], [Comments], [Comments] which generated by command.
    │
    │       # important configuration, point to the root library module.
    │       tested.project.dir=../
    │
    ├── build.xml
    │       unchanged, generated by "android create test-project <project_name>" command.
    │
    └── src
        └── com
            └── vincestyling
                └── asqliteplus
                    ├── BaseDBTest.java
                    ├── QueryStatementTest.java
                    └── the test source code lie here...

我的项目结构遵循了Google建议我们做的Android Test Projects描述,包括携带核心逻辑的根库模块和根模块内部的测试模块。以上是项目中的关键资源,但不是所有文件,我将在发布项目链接后发布。

------------更新2014-01-06 --------------

目前,我的项目已发布在我的github上:aSQLitePlus-android,如有兴趣,请查看详细信息。