无法找到以下内容的检测信息:ComponentInfo {} - 同时手动更改了ProductFlavor的包名

时间:2016-04-01 08:52:57

标签: android testing gradle

我尝试为我的Android应用程序的某种风格运行一个Instrumentation Test并始终得到这个:

Test running failed: Unable to find instrumentation info for:     ComponentInfo{<packackename>/android.support.test.runner.AndroidJUnitRunner}
Empty test suite.

这只发生在某个productFlavor中,我必须在build.gradle中更改packagename&#34;手动&#34;用:

 applicationVariants.all { variant ->
    def flavorName = variant.getVariantData().getVariantConfiguration().getFlavorName()
    def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();

    if (flavorName.toLowerCase().contains("foobar")) {
        mergedFlavour.setApplicationId(mergedFlavour.getApplicationId() + ".foobar")
    }
}

我已经尝试在android-testing.gradle中做同样的事情,但实际上所有的包名都很好看:

Installing de.test.foobar.debug
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/de.test.foobar.debug"
pkg: /data/local/tmp/de.test.foobar.debug
Success

Installing APK: 
Uploading file to: /data/local/tmp/de.test.foobar.debug.test
Installing de.test.foobar.debug.test
DEVICE SHELL COMMAND: pm install -r     "/data/local/tmp/de.test.foobar.debug.test"
pkg: /data/local/tmp/de.test.foobar.debug.test
Success

如果我删除&#34;手册&#34;更改此特定productflavor的包名称,所有测试都执行正常。 我已经尝试更改了instrumentationRunner并确保它在测试执行的配置中是相同的 - 但遗憾的是没有运气......

如果执行测试,是否有可能覆盖已更改的applicationId?

感谢您的每一个输入!

2 个答案:

答案 0 :(得分:2)

如果您最近升级到Android Studio 2.x并启用了MultiDex(即时运行需要它),您需要在gradle.build中添加以下内容

defaultConfig {
    ...

    multiDexEnabled true // <- if you have this you need the following
    testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"

    ...   
}

答案 1 :(得分:0)

testApplicationId 需要为您修改的每种风格匹配 applicationId ,以便Test Runner可以找到测试。您可以使用 testVariants 以及 applicationVariants 来完成此操作。

在你的情况下是这样的:

testVariants.all { variant ->
    def flavorName = variant.getVariantData().getVariantConfiguration().getFlavorName()
    def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor();

    if (flavorName.toLowerCase().contains("foobar")) {
        mergedFlavour.setApplicationId(mergedFlavour.getApplicationId() + ".foobar")
    }
}