Android Studio导入现有单元测试“无法找到仪器信息”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio导入现有单元测试“无法找到仪器信息”相关的知识,希望对你有一定的参考价值。

所以我正在尝试我们的android Studio并测试一个在eclipse中工作的项目。我得到了所有编译,应用程序将启动就好了,但我不能让我的单元测试和工作。我最终通过添加我的应用程序li​​b文件夹作为依赖项来编译它们,但我不认为我的运行配置是正确的,因为无论何时我运行我的测试我都会收到此错误

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的状态发生了很大变化,但许多有用的人继续发布他们针对此错误的特定解决方案。我建议先主动排序并先查看最新的答案。

答案

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

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

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

另一答案

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

        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)

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

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

另一答案

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

另一答案

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

由于我使用的测试库,我需要通过将debugCompile 'com.android.support.test:rules:0.2' 添加到我的Gradle构建来启用multidex支持。我不确定我是否已经完全实现了multidex支持(自从我上次实现它以来,正确的方式已经改变了)但最终,我最终不需要它并从我的构建中删除该行修复了错误。我的工作团队在典型的Android风格中遇到了一些与支持multidex支持相关的测试问题。

另一答案

在我的相同类的情况下,一些测试用例正在选择在build.gradle中定义的正确的测试运行器(android.support.test.runner.AndroidJUnitRunner),并且一些测试用例正在拾取android.test.InstrumentationTestRunner,它未被定义至少在Manifest或build.gradle或编辑配置中。理想情况下,它应该由Sync Project与Gralde选项解决,尽管它不起作用。

最后我发现错误的测试运行器针对multiDexEnabled true中的方法定义,我手动更改它,问题得到解决。

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

另一答案

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

另一答案

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

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

  1. 在EditConfigurations - > General选项卡 - > Specific Instrumentation Runner(可选) 这仅存在于Android Studio 2.2和版本之前,在最新版本中,它已被删除。
  2. 在清单文件中,测试运行器配置如下。
.idea/workspace.xml

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

  1. 在gradle文件中。 如果您使用上面的Android Studio v2.3,这是唯一推荐的方法。
    < instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
           android:targetPackage="com.mytestapp.test"/>
另一答案

就我而言,解决方案是:

  • 查看>工具Windows>构建变体
  • 选择* Debug变体
另一答案

解释和解决方案

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

  • 正在测试的应用: <manifest package="com.example.appbeingtested" … >
  • 测试应用: <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.appbeingtested" … />
另一答案

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

android.test.InstrumentationTestRunner 

com.android.test.runner.MultiDexTestRunner

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

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

更新:

正如@dan评论,InstrumentationTestRunner被弃用而不是使用AndroidJUnitRunner

另一答案

在我的情况下,运行/调试配置是错误的。

一解决方案:

  1. 转到运行/调试配置 运行 - >编辑配置...
  2. 为您的测试类设置Android-Test
  3. 选择左侧的Android测试配置 或使用加号图标创建一个新图标,并将其命名为例如ClassNameTest
  4. 选择包含测试类的模块。在最简单的情况下,测试类位于您的应用程序模块中,因此请选择应用程序。
  5. 在下一行选择您的测试配置。我用: 类:运行一个类的所有测试。
  6. 选择你的考试班
  7. 最后配置目标设备并选择确定。
另一答案

这仅适用于Android Studio版本<2.3

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

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

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

另一答案

我和@Iuliia Ashomok有同样的问题,并在互联网上尝试了一切。

仍然没有运气。

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

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

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

但是,当我使用Sony Xperia Z3(无根)时,一切都运行良好。

另一答案

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

  1. 打开AndroidManifest.xml并检查它是否有 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.YourClass" android:label="Tests for com.example.YourClass"/>

如果没有做下一个:

  1. 将您的目录结构重新组织为以下结构:(这是qazxsw poi的建议)
official source
  1. 你看到你需要有内部测试模块。 要在Idea IDE中创建它,请执行下一个文件 - >新模块 - >测试模块。创建后,您可以看到一个新的AndroidManifest.xml。它里面有仪表声明。
另一答案

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

以上是关于Android Studio导入现有单元测试“无法找到仪器信息”的主要内容,如果未能解决你的问题,请参考以下文章

单元测试不适用于 Android Studio 北极狐

在Android Studio进行“简单配置”单元测试(Android Junit)

如何在 Android Studio 中创建测试?

Android Studio Cmake:“C 编译器 clang.exe 无法编译简单的测试程序

在Android Studio中可以进行单元测试

Android Studio系列-单元测试入门篇