Ошибка = Не удалось найти информацию об инструментарии для: ComponentInfo{ }

Я пытаюсь выдержать тесты эспрессо, но я продолжаю получать эту ошибку:

INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.mikeestrada.test/android.test.InstrumentationTestRunner}

Это сработало один раз, но я не могу правильно воссоздать отчеты. Они просто пустые, ничего не проверял. Я пробовал множество команд, включая

adb shell am instrument -w -r com.mikeestrada.test/android.test.InstrumentationTestRunner

а также

adb shell am instrument -w -r   com.mikeestrada.test/com.google.android.apps.common.testing.testrunner.GoogleInstrumentation TestRunner

Вот мои фрагменты кода:

AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapplication"
        android:versionCode="1"
        android:versionName="1.0" >

        <uses-sdk
            android:minSdkVersion="7"
            android:targetSdkVersion="19" />

        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.myapplication.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
                <instrumentationandroid:name="com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"                   
    android:targetPackage="com.mikeestrada.test"/>

TestStartScreen.java

    package com.mikeestrada.test;

    import android.test.ActivityInstrumentationTestCase2;
    import android.test.ActivityUnitTestCase;
    import android.test.AndroidTestCase;
    import android.test.suitebuilder.annotation.LargeTest;
    import android.view.View;

    import com.example.myapplication.MainActivity;
    import com.example.myapplication.R;
    import com.google.android.apps.common.testing.ui.espresso.Espresso;
    import com.google.android.apps.common.testing.ui.espresso.ViewAssertion;
    import com.google.android.apps.common.testing.ui.espresso.ViewInteraction;
    import com.google.android.apps.common.testing.ui.espresso.action.ViewActions;
    import com.google.android.apps.common.testing.ui.espresso.assertion.ViewAssertions;
    import com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers;

    import junit.framework.Assert;
    import org.hamcrest.Matcher;


    public class TestStartScreen extends ActivityInstrumentationTestCase2<MainActivity> {

        public TestStartScreen() {
            super(MainActivity.class);
        }

        @LargeTest
        public void testHelloWorld(final Matcher<View> viewMatcher) {
            // Find
            //ViewInteraction button1 = onView(ViewMatchers.withId(R.id.button1)); // Find the button
            ViewInteraction helloWorldText = Espresso.onView(ViewMatchers.withText("Hello world!")); // Find the text

            // Action
            //button1.perform(ViewActions.click()); // Click the button
            helloWorldText.perform(ViewActions.typeText("Bye World!"));
            Espresso.onView(ViewMatchers.withText(R.id.withText));

            // Check
            helloWorldText.check(ViewAssertions.matches((ViewMatchers.isDisplayed())));  // Hello world text is hidden

            //Espresso.onView(withId(R.id.my_view)).check(matches(withText("Hello  world!")));
        }
    }

build.gradle

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

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            assets.srcDirs = ['assets']
        }
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    instrumentTestCompile files('libs/espresso-1.1-bundled.jar')
}
android {
    defaultConfig {
        testInstrumentationRunner     "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }
}
task wrapper (type: Wrapper) {
    gradlerVersion = '1.9'
}

If it means anything - the attributes of <instrumentation> in the manifest are colored red as if IntelliJ does not recognize them.

Любая помощь велика, спасибо!


person mikeestrada67    schedule 22.01.2014    source источник
comment
Не могли бы вы опубликовать свой тестовый AndroidManifest.xml?   -  person Bolhoso    schedule 27.01.2014
comment
Ой, извините, теперь я вижу тег «instrumentation» ;) Мое внимание привлекло то, что у вас есть активность, объявленная в разделе «application» вашего AndroidManifest. Я никогда не видел, чтобы тестовое приложение объявляло активность. Попробуйте удалить это и проверьте, работают ли ваши тесты так, как вы того заслуживаете.   -  person Bolhoso    schedule 28.01.2014
comment
возможно, это поможет: stackoverflow.com/questions/ 14269687/   -  person gsaslis    schedule 18.04.2014


Ответы (7)


Вам необходимо проверить, какие пакеты инструментов были установлены на вашем устройстве:

 adb shell pm list instrumentation

Затем проверьте, действительно ли там указан com.mikeestrada.test.

person IgorGanapolsky    schedule 30.04.2014
comment
а если нет? - person behelit; 12.04.2016
comment
@behelit Тогда вы не сможете провести на нем инструментальное тестирование. - person IgorGanapolsky; 12.04.2016
comment
@dan Когда вы говорите ~ничего не работает, какую конкретно ошибку вы получаете? - person IgorGanapolsky; 14.03.2017
comment
Как следует устанавливать пакеты инструментов? - person Julsteri; 26.05.2017
comment
@Julsteri Он объявлен в вашем build.gradle. При запуске тестов инструментарий для них будет установлен автоматически. - person IgorGanapolsky; 26.05.2017
comment
@IgorGanapolsky Я объявил специальный бегун для Cucumber в build.gradle, но он не указан в pm list instrumentation. - person Julsteri; 29.05.2017
comment
@Julsteri Вам также понадобится это в вашем build.gradle: testInstrumentationRunner android.support.test.runner.AndroidJUnitRunner - person IgorGanapolsky; 30.05.2017
comment
@Julsteri Я не знал, что нужно объявлять конкретный идентификатор приложения. Это не упоминается в этом документе: developer.android. com/training/testing/unit-testing/. Хотя рад, что у тебя все заработало... - person IgorGanapolsky; 30.05.2017
comment
Кажется, я где-то читал, что идентификаторы приложений должны автоматически настраиваться, чтобы они были уникальными во время выполнения. Но изменить его вручную (с добавлением .test) было единственным способом запустить мои тесты. Я не знаю почему. - person Julsteri; 31.05.2017
comment
Извиняюсь! Я не могу проверить, что мое приложение указано там с помощью данной команды adb shell pm list tooling. Если я использую пакеты adb shell pm list |cut -f 2 -d : отображается мое приложение. - person Vijay; 06.03.2018

Если пакет инструментов отсутствует, установите его с помощью следующей команды:

$ gradle :{$project}:installDebugAndroidTest

«задача

person korosmatick    schedule 02.07.2015
comment
Это решило проблему, но в моем случае имя задачи было installAdhoctestDebugAndroidTest. - person June; 14.01.2019

Глядя на ваш файл build.gradle, проблема в том, что у вас нет следующей конфигурации в разделе defaultConfig:

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

Для работы эспрессо требуется GoogleInstrumentationTestRunner.

Также с системой сборки gradle вам не нужен AndroidManifest.xml для тестового проекта, потому что он генерируется автоматически.

person Marc Thomas    schedule 07.10.2014

Кроме того, похоже, что у вас пакет приложения com.mikeestrada. Итак, в AndroidManifest установите android:targetPackage как android:targetPackage="com.mikeestrada".

Я надеюсь, это поможет.

person paynd    schedule 16.09.2014

Проблема в том, что вам не хватает пробела:

instrumentationandroid:name

должно быть

instrumentation android:name
person Omar Madbouli    schedule 17.07.2015

https://developer.android.com/studio/test/command-line

Похоже, вам нужно убедиться, что ваше приложение и тестовые apks установлены.

person ether_joe    schedule 07.11.2020

Чтобы правильно запустить инструментальное тестирование, следуйте этим инструкциям:

  1. Установите базовый пакет на устройство/эмулятор. Например, если вы хотите протестировать комбинацию devDebug {flavorBuildType}, выполните ./gradlew installDevDebug. Замените строку devDebug ароматом и типом сборки, которые есть в вашем проекте.

  2. Установите тестовый пакет на устройство/эмулятор. Если вы установили devDebug, теперь выполните ./gradlew installDevDebugAndroidTest, по умолчанию будет установлен базовый пакет с добавлением суффикса .test.

  3. Убедитесь, что инструменты установлены правильно, запустив adb shell pm list instrumentation, он должен напечатать строку с вашим тестовым пакетом и доступным исполнителем, что-то вроде: androidx.test.runner.AndroidJUnitRunner

  4. Запустите инструментальный тест. Например, если вы хотите протестировать один тестовый класс из вашего пакета, вы можете использовать это: adb shell am instrument -w -e class com.your.base.package.MyClassTest com.your.base.package.test/androidx.test.runner.AndroidJUnitRunner. Все доступные параметры см. здесь

  5. Необязательно: после завершения тестов вы можете удалить пакеты с помощью ./gradlew uninstallDevDebug uninstallDevDebugAndroidTest.

person MatPag    schedule 15.01.2021