60

所以我正在尝试我们的 Android Studio 并测试一个在 eclipse 中工作的项目。我已经编译了所有内容,应用程序将正常启动,但我无法让我的单元测试启动并正常工作。我最终通过将我的应用程序 lib 文件夹添加为依赖项来编译它们,但我认为我的运行配置不正确,因为每当我运行测试时都会出现此错误

Installing <packagename>
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/<packagename>"
pkg: /data/local/tmp/<packagename>
Success


Running tests
Test running started
Test running failed: Unable to find instrumentation info for: ComponentInfo{<packagename>/android.test.InstrumentationTestRunner}
Empty test suite.

编辑:对于所有新来者,自从我最初发布此问题以来,Android Studio 的状态发生了很大变化,但许多乐于助人的人继续发布他们针对此错误的特定解决方案。我建议按活动排序并首先查看最新答案。

4

15 回答 15

61

如果您在其中定义了一个 testInstrumentationRunner,build.gradle例如:

android {
    defaultConfig {
        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"

确保在运行配置窗口中,您在 Android Studio / IntelliJ 运行配置中使用完全相同的“特定仪器运行程序”进行测试。

于 2014-04-23T12:39:45.700 回答
20

就我而言,解决方案是:

  • 查看 > 工具窗口 > 构建变体
  • 选择 *Debug 变体
于 2013-12-17T17:19:02.223 回答
18

解释和解决方案

如果在测试应用程序清单中声明的​​ targetPackage 与在被测试应用程序清单中声明的​​包不同,则会出现此错误“无法找到仪器”:

  • 正在测试的应用程序:

    <manifest package="com.example.appbeingtested" … >
    
  • 测试应用:

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.example.appbeingtested" … />
    
于 2013-07-15T11:39:03.833 回答
16

我通过改变解决了这个问题

android.test.InstrumentationTestRunner 

进入

com.android.test.runner.MultiDexTestRunner

在 EditConfigurations -> Specific Instrumentation Runner (optional) 选项卡中。

事实证明,因为我的应用程序正在使用 MultiDex,所以我还需要将测试运行程序更改为 MultiDexTestRunner。

更新:

正如@dan 评论,InstrumentationTestRunner不推荐使用AndroidJUnitRunner

于 2016-05-16T03:12:43.907 回答
4

就我而言,运行/调试配置是错误的。

一种解决方案:

  1. 转到运行/调试配置

    运行 -> 编辑配置...

  2. 为你的测试类设置一个 Android-Test

  3. 在左侧选择您的 Android 测试配置
    或使用加号图标创建一个新配置并将其命名,例如ClassName Test

  4. 选择包含您的测试类的模块。在最简单的情况下,测试类在你的 app 模块中,所以选择app

  5. 在下一行选择您的测试配置。我用:

    • :运行一个类的所有测试。
  6. 选择你的测试班

  7. 最后配置您的目标设备并选择确定。

于 2015-03-31T16:14:24.223 回答
4

这仅适用于 AndroidStudio 版本 < 2.3

在我的情况下,选择了错误的仪表运行器。

我通过在测试的运行/调试配置中指定检测运行器来解决此问题(见下文)。在那里,您可以从列表中选择一个跑步者。 1]

您会找到运行/调试配置:运行 -> 编辑配置 ...

于 2016-04-13T11:50:47.360 回答
1

它接缝你没有良好的项目结构。

  1. 打开 AndroidManifest.xml 并检查它是否有

    <instrumentation android:name="android.test.InstrumentationTestRunner"
                         android:targetPackage="com.example.YourClass"
                         android:label="Tests for com.example.YourClass"/>
    

如果否,请执行以下操作:

  1. 将您的目录结构重新组织为以下结构:(这是来自官方来源的推荐)
        MyProject/
              AndroidManifest.xml
              res/
                  ... (resources for main application)
              src/
                  ... (source code for main application) ...
              tests/
                  AndroidManifest.xml
                  res/
                      ... (resources for tests)
                  src/
                      ... (source code for tests)
  1. 你看到你需要有内部测试模块。要在Idea IDE
    中创建它,请执行下一个File -> New Module -> Test Module。创建后您可以看到一个新的 AndroidManifest.xml。它里面有仪器声明。
于 2015-06-22T14:05:58.270 回答
1

我遇到了与@Iuliia Ashomok 相同的问题,并尝试了互联网上的所有内容。

仍然没有运气。

经过2天的调查,我发现问题是由手机造成的。.V.

我最初使用小米 Mi4i 作为测试设备(已root)并且无法运行测试。当然,我得到了下面的错误。

Test running failed: Unable to find instrumentation info for: ComponentInfo{<packagename>/android.test.InstrumentationTestRunner}

但是,当我使用 Sony Xperia Z3(无 root)时,一切正常。

于 2016-03-01T10:17:09.943 回答
0

我曾经遇到过这个错误。我在 CLI 模式下使用 sdk 工具。当我在测试项目中启动“ant test”时发生了错误。后来我注意到我之前甚至没有构建和安装测试项目!(使用'ant debug install')所以你应该尝试检查你的运行配置,看看测试项目是否在运行测试之前有效地构建。对于另一种情况,Android Studio 使用 Gradle。我不太了解,但尝试检查项目的 Gradle 设置或 Gradle 设置文件。

于 2013-07-03T16:42:54.697 回答
0

在我的情况下,在同一类中,一些测试用例选择了 build.gradle 中定义的正确测试运行程序(android.support.test.runner.AndroidJUnitRunner),而一些测试用例选择了未定义的 android.test.InstrumentationTestRunner至少在 Manifest 或 build.gradle 或编辑配置中。理想情况下,它应该通过 Sync Project with Gralde 选项解决,尽管它不起作用。

最后我发现针对 中的方法定义了错误的测试.idea/workspace.xml运行程序,我手动更改了它,问题得到了解决。

通常我们不应该编辑这个 Android Studio 生成的文件,但对我来说它确实是最后一个选项。

于 2017-09-05T09:35:00.057 回答
0

对我来说,问题是有这种依赖性:

debugCompile 'com.android.support.test:rules:0.2'

在我删除它之后,我的测试被发现并再次运行。

请注意,我没有收到“无法找到仪器”消息,而是收到“未找到测试”消息。

于 2015-07-23T07:41:15.543 回答
0

由于这些答案都没有帮助我,所以我想向任何像我一样绝望的人分享我的解决方案。:)

由于我正在使用测试库,我需要通过添加multiDexEnabled true到我的 Gradle 构建来启用 multidex 支持。我不确定我是否从一开始就完全实现了 multidex 支持(自从我上次实现它以来,正确的做法已经改变)但最终,我最终不需要它并从我的构建中删除该行修复了错误. 我的团队在典型的 Android 风格中遇到了一些与启用 multidex 支持相关的测试问题。

于 2016-04-22T00:34:10.650 回答
0

原来是延迟问题。在我等待一段时间阅读互联网解决方案后,它会自动修复。我重新编译了代码,它工作了。

于 2015-12-09T19:18:02.763 回答
0

这个答案将解释历史问题并总结所有相关设置。

基本上,仪器测试运行器配置有 3 个可能的位置。

  1. 在 EditConfigurations -> General 选项卡 -> Specific Instrumentation Runner (optional)
    这仅存在于 Android Studio 2.2 和之前的版本中,在最新版本中,它已被删除。

  2. 在清单文件中,测试运行器配置如下。

    < instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
           android:targetPackage="com.mytestapp.test"/>

由于“android.test.InstrumentationTestRunner”在 API 级别 24 中已弃用,因此此设置也不是必需的,只要您在 gradle 文件中配置运行程序即可。
如果要保留此设置,请确保运行器名称应与您在 gradle 文件中设置的名称匹配,否则您也会收到此错误。

  1. 在 gradle 文件中。
    如果您使用上面的 Android Studio v2.3,这是唯一推荐的方法。
    android {
    .......
        defaultConfig {  
            .......  
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"  
        }   
    }
于 2019-03-19T08:57:53.410 回答
0

就我而言,问题也出在设备上。其他设备工作正常。简单的卸载和重新安装修复它。

于 2018-01-31T21:57:34.037 回答