testing运行失败:由于“java.lang.ClassNotFoundException”导致testing运行失败

这是我第一次设置一个android test project来testing一个android project

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

我会麻烦这更多,但是我没有得到任何更多的信息,如它试图find哪个类,等等。关于如何从错误中获得更多信息的任何想法? 我应该看的任何公共区域,或任何可能需要configuration的东西,我忽略?

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

 [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 test project ,我创build了一个简单的testing,用类似于我想要在我的android projecttesting的类匹配的包。 所以像com.company.android.projectname 。 我已经在android test project 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应该是什么,如果我想要testing每个包需要多个工具等等。当我把它设置为com.company.android ,当我得到java.lang.ClassNotFoundException 。 任何build议,将不胜感激,在此期间,我会继续努力,自己解决这个问题。

Solutions Collecting From Web of "testing运行失败:由于“java.lang.ClassNotFoundException”导致testing运行失败"

找出我的问题,并发布文件的答案…

我的问题的根源是两个不同的东西:

  1. 我做了一些重构,这改变了我的android.app.Application类和我的活动的位置。 这使得我的主程序不工作,因为我需要更新我的android project清单。
  2. 在我的Android项目中更新我的清单后,我不得不在我的android test project做一些更新,指向扩展android.app.Application的类的更新位置。

之后,做了一些清理和testing,事情都很好。

仅供参考,我碰到这个,不得不补充

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

在我的<application/>标记中

合并后,我有这个问题,其中build.gradle指定错误的testing包,因为我一直在使用默认值。

通过简单地从build.gradle中删除这些行,它能够在src/androidTest的默认包中find必要的类。

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

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

我今天遇到了这个问题,我采用了android特有的ant build.xml ,它坐在“$ {sdk.dir} / tools / ant /”目录下执行命令行中的所有testing用例,但是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 

我花了一些时间来解决这个问题,我find了根模块的AndroidManifest.xml中的主要原因,我认为应用程序元素是没有configuration,所以我省略了清单元素,这导致我的问题。

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

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

我的项目结构遵循Googlebuild议我们做的Androidtesting项目的描述,包括核心逻辑的根库模块和根模块内部的testing模块。 以上是项目中的关键资源,但不是所有的文件,我都会在发布项目链接后发布。

————更新2014-01-06 ————–

目前,我的项目发布在我的github上: aSQLitePlus-android ,如果感兴趣,请检查细节。