测试运行失败:无法为:ComponentInfo{}找到仪器信息——尝试在Gradle中使用IntelliJ进行测试时出



每次我尝试运行测试时,控制台都会显示:

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*仪器java*主要java清单* build.gradle

我的构建。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>

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

我在这里添加我的经验,因为这是谷歌搜索... Unable to find ... ComponentInfo ...错误信息时的第一个点击之一。

在我的情况下,添加testInstrumentationRunner就像这里一样:

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

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

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

  1. In Run - Edit Configurations - Android Tests
    指定仪表运行器为android.test.InstrumentationTestRunner

  2. 然后在"Build variables"工具窗口中(在左侧),将测试工件更改为Android Instrumentation Tests

构建中不需要testInstrumentationRunner。在manifest文件中不需要Gradle和instrumentation标记。

当我创建一个新包时,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 variables选项卡中,确保您选择了Android Instrumentation Tests和正确的buildType

我必须把VikingGlen的答案、刘婷的答案和这个答案结合起来。这个答案适用于Android Studio 2.1版本。

  1. 运行→编辑配置…→一般→特定的仪表运行程序(可选):"android.support.test.runner.AndroidJUnitRunner"

  2. build.gradle(你所有的依赖),把这个:

defaultConfig {
   testInstrumentationRunner "androidx.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
    }
}

值得注意的是,当我在使用常规测试运行器后创建自定义测试运行器时,as2.3挂起了。我得到了同样的错误张贴在问题。

删除所有 Android仪器测试的调试配置并重建修复了它。我相信问题在于你不再可以在调试配置中选择自定义运行器,因为它很可能是通过gradle内置的。

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

*注意:不要试图添加一个manifest到你的androidTest文件夹,Gradle文档特别声明manifest应该在你创建androidTest文件夹时自动生成。对我来说,问题是文件没有被生成为androidTest没有被IntelliJ/Gradle识别,从而抛出无仪器错误。

我遇到了这个问题,并通过运行->编辑配置->左上角的绿色'+'按钮-> JUnit

设置"use the classpath mod…"'到'app'(或您的默认应用程序名称,即在运行应用程序时出现在运行(播放按钮)左侧的名称)

最后,在'class:'文本框中输入测试类名。单击apply并确定。

在这一点上,如果测试类没有其他错误,它应该工作。

这是我在我的项目中注意到的,在我的应用程序(主)模块构建中。gradle我有以下buildType配置

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

当我使用AndroidJUnitRunner作为测试运行器(都来自Android Studio)和testInstrumentationRunner在构建。Gradle,测试运行顺利。

multiDexEnabled为defaultConfig

的子模块中
defaultConfig {
    multiDexEnabled true
    ....
}

我遇到了这个问题

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

当我指定AndroidJUnitRunner在IDE和子模块build.gradle。这是通过指定MultiDexTestRunner作为IDE/build.gradle中的测试运行器来修复的。

总而言之,在构建中指定multiDexEnabled true时,使用MultiDexTestRunner运行测试。AndroidJUnitRunner作为测试运行器。

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

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

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

因此,应用程序不会重新安装,测试套件也没有什么可运行的。

解决我的问题的方法是从

更改方法名称
@Test
public void test() {
    ...
}

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

希望对大家有所帮助。

相关内容

  • 没有找到相关文章

最新更新