这是我第一次设置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
。
答案 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)
找出我的问题并发布答案用于文档目的......
我的问题的根源是两件不同的事情:
android.app.Application
课程和我的活动。这就是我的
主要程序没有工作,因为我需要更新我的清单
android project
。android test project
中进行一些更新,以指向扩展android.app.Application
的类的更新位置。之后,做了一些清理并再次测试,事情很好。
答案 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,如有兴趣,请查看详细信息。