Android Studio导入现有单元测试“无法找到仪器信息”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio导入现有单元测试“无法找到仪器信息”相关的知识,希望对你有一定的参考价值。
所以我正在尝试我们的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的状态发生了很大变化,但许多有用的人继续发布他们针对此错误的特定解决方案。我建议先主动排序并先查看最新的答案。
如果您在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个可能的位置。
- 在EditConfigurations - > General选项卡 - > Specific Instrumentation Runner(可选) 这仅存在于Android Studio 2.2和版本之前,在最新版本中,它已被删除。
- 在清单文件中,测试运行器配置如下。
.idea/workspace.xml
由于在API级别24中不推荐使用“android.test.InstrumentationTestRunner”,因此只要在gradle文件中配置运行程序,此设置也不是必需的。 如果要保留此设置,请确保转轮名称与您在gradle文件中设置的名称相匹配,否则您也会收到此错误。
- 在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
。
在我的情况下,运行/调试配置是错误的。
一解决方案:
- 转到运行/调试配置 运行 - >编辑配置...
- 为您的测试类设置Android-Test
- 选择左侧的Android测试配置 或使用加号图标创建一个新图标,并将其命名为例如ClassNameTest
- 选择包含测试类的模块。在最简单的情况下,测试类位于您的应用程序模块中,因此请选择应用程序。
- 在下一行选择您的测试配置。我用: 类:运行一个类的所有测试。
- 选择你的考试班
- 最后配置目标设备并选择确定。
这仅适用于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(无根)时,一切都运行良好。
它接缝你没有好的项目结构。
- 打开AndroidManifest.xml并检查它是否有
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.YourClass" android:label="Tests for com.example.YourClass"/>
如果没有做下一个:
- 将您的目录结构重新组织为以下结构:(这是qazxsw poi的建议)
official source
- 你看到你需要有内部测试模块。 要在Idea IDE中创建它,请执行下一个文件 - >新模块 - >测试模块。创建后,您可以看到一个新的AndroidManifest.xml。它里面有仪表声明。
我曾经遇到过这个错误。我在CLI模式下使用sdk工具。当我在测试项目中启动'ant test'时发生错误。我后来注意到我之前甚至没有构建和安装测试项目! (使用'ant debug install')所以你应该尝试检查你的运行配置,看看在运行测试之前测试项目是否有效构建。对于另一种情况,Android Studio使用Gradle。我不太清楚,但尝试检查项目的Gradle设置或Gradle设置文件。
以上是关于Android Studio导入现有单元测试“无法找到仪器信息”的主要内容,如果未能解决你的问题,请参考以下文章
在Android Studio进行“简单配置”单元测试(Android Junit)