测试运行失败:无法找到以下内容的检测信息:ComponentInfo {} - 尝试使用Gradle在IntelliJ中测试时出错

问题描述 投票:48回答:10

每当我尝试运行测试时,控制台都说:

Running tests
Test running startedTest running failed: Unable to find instrumentation info for:
ComponentInfo{com.employeeappv2.employeeappv2.test/android.test.InstrumentationTestRunner}
Empty test suite.

我已经坚持了一段时间,到目前为止我在网上看到的解决方案没有帮助。我的项目结构设置如下:

*主模块-src * instrumentTest -java * main -java -manifest * build.gradle

我的build.gradle文件如下所示:

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

android {
compileSdkVersion 19
buildToolsVersion "19.1.0"

defaultConfig {
    minSdkVersion 16
    targetSdkVersion 19
    versionCode 1
    versionName "2.1.0"
    testPackageName "login.test"
    testInstrumentationRunner "android.test.InstrumentationTestRunner"
}
buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-   rules.txt'
    }
}

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/license.txt'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/scandit.zip')
compile project(':pullToRefresh')
compile 'com.android.support:appcompat-v7:19.+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1+'
compile 'org.springframework.android:spring-android-rest-template:1.0.1+'
compile 'org.json:json:20090211'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0'
compile 'com.fasterxml.jackson.core:jackson-core:2.3.1'
compile 'com.android.support:support-v4:19.1.+'
compile 'com.mcxiaoke.volley:library:1.0.+@aar'
androidTestCompile 'junit:junit:3.8'
}

您是否需要为测试目录提供单独的清单?如果是这样的话会是什么样子?

编辑:我尝试将一个清单添加到我的instrumentTest目录,没有运气。请注意,我无法使用IntelliJ来解析targetPackage名称,因此它显示为红色。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.employeeappv2.employeeappv2.src.instrumentTest"
      android:versionCode="1"
      android:versionName="1.0.0">
<application>
    <uses-library android:name="android.test.runner" />
</application>
<instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.employeeappv2.employeeappv2.src.main"/>
</manifest>
android gradle android-testing
10个回答
25
投票

我正在使用Android Studio 1.1,以下步骤为我解决了这个问题:

  1. Run - Edit Configurations - Android Tests 将instrumentation runner命名为android.test.InstrumentationTestRunner
  2. 然后在“构建变体”工具窗口(左侧)中,将测试工件更改为Android Instrumentation Tests

build.gradle中不需要testInstrumentationRunner,清单文件中不需要检测标记。


0
投票

我的问题的解决方案是更改方法名称

@Test
public void test() {
    ...
}

@Test
public void testSomething() {
    ...
}

希望它可以帮助某人。


25
投票

当我尝试将multiDexEnabled true添加到build.gradle时,我遇到了同样的错误。

我在这里添加了我的经验,因为这是使用... Unable to find ... ComponentInfo ...错误消息搜索时的第一个Google点击之一。

在我的情况下像这里添加testInstrumentationRunner做了诀窍:

...
android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
    }
}

(我有com.android.tools.build:gradle:1.5.0


18
投票

当我创建一个新包时,Studio创建了一个ApplicationTest类。以us.myname.mypackage为例,创建了以下目录结构:

app/[myPackage]/src/androidTest/java/us/myname/mypackage/ApplicationTest.class

最初它开箱即用。我安装产品口味后就退出了工作。我随后对build.gradle进行了以下更改:

defaultConfig {
   ...
   testInstrumentationRunner "android.test.InstrumentationTestRunner"
}

有些人更喜欢

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

(使用我当前的配置,我必须在调试时使用...InstrumentationTestRunner,并在使用发布版本类型时使用AndroidJUnitRunner。)

以上配置仅适用于调试版本类型。如果您希望将它与发行版或自定义构建类型一起使用,则可以在build.gradle中包含以下内容:

buildTypes {
     release {
         ...
     }
 debug {
     ...
 }
}
testBuildType "release"

在Studio左下角的Build Variants选项卡中,确保选择了Android Instrumentation Tests并选择了正确的buildType


11
投票

对于它的价值,当我使用常规测试运行器创建自定义测试运行器后,AS 2.3被挂断了。我得到了与问题中发布的相同的错误。

删除所有Android Instrumented测试的调试配置并重建修复它。我相信问题在于你不再可以在Debug Configurations中选择自定义跑步者,因为它很可能是通过gradle构建的。


8
投票

我不得不做VikingGlen的answer,Liuting的answerthis答案的组合。此答案适用于Android Studio 2.1版。

  1. 运行 - >编辑配置... - >常规 - >特定检测运行器(可选):“android.support.test.runner.AndroidJUnitRunner”
  2. build.gradle(包含所有依赖项的那个)中,放下: defaultConfig { testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' }

然后它可以运行这种类型的测试:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ApplicationTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void login() {
        //Open Drawer to click on navigation.
        onView(withId(R.id.drawer_layout))
                .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
                .perform(open()); // Open Drawer
    }
}

1
投票

所以主要的问题是,当我在/ src /下创建一个androidTest文件夹时,它没有被IntelliJ选为测试的源文件夹(java子目录应该变为绿色)。我使用的是IntelliJ 13.0.3,升级到13.1.3之后,我的所有麻烦都消失了。

*注意:不要尝试在您的androidTest文件夹中添加清单,Gradle文档明确声明在创建androidTest文件夹时应该自动生成清单。对我来说问题是由于IntelliT / Gradle没有识别androidTest而没有生成文件,因此抛出了无检测错误。


1
投票

我遇到了这个问题并通过左上角的Run - > Edit Configurations - > Green'+'按钮修复了它 - > JUnit

从那里,将'使用classpath mod ...'设置为'app'(或者你的默认应用名称,这是运行应用程序时显示在运行左侧的那个(播放按钮))

最后,将您的测试类名称放在'class:'文本框中。点击申请即可。

此时,如果测试类没有其他错误,它应该工作。


1
投票

这是我在我的项目中注意到的,在我的app(主)模块build.gradle中,我有以下buildType配置

buildTypes {
        debug {
            multiDexEnabled true
        }

        mock {
            initWith(buildTypes.debug)
        }
    }
testBuildType "mock"

当我使用AndroidJUnitRunner作为测试运行器(均来自Android Studio)和build.gradle中的testInstrumentationRunner时,测试顺利进行。

在具有multiDexEnabled的子模块中,为true,为defaultConfig

defaultConfig {
    multiDexEnabled true
    ....
}

我遇到了问题

Test running startedTest running failed: Unable to find instrumentation info for:{mypackage.x.y/android.support.test.runner.AndroidJUnitRunner"}

当我在IDE和子模块build.gradle中指定AndroidJUnitRunner时。通过在IDE / build.gradle中指定MultiDexTestRunner作为测试运行器来解决这个问题。

总而言之,使用MultiDexTestRunner在build.gradle中指定multiDexEnabled true时运行测试,否则使用AndroidJUnitRunner作为测试运行器。


1
投票

确保已为所有用户卸载应用程序。

转到设置 - >应用程序(所有应用程序) - >如果您的应用程序在那里,然后点击它 - >菜单 - >卸载所有用户。

我的问题是该应用程序曾在某一时刻卸载,但仍在设备上;意味着没有为所有用户卸载它。 (另一个问题,不知道如何解决。我是我设备上唯一的用户)

因此,应用程序将无法重新安装,测试套件无法运行。

© www.soinside.com 2019 - 2024. All rights reserved.