Не удалось выполнить тест: не удалось найти информацию об инструментарии для: ошибка ComponentInfo {} при попытке протестировать IntelliJ с помощью Gradle

Каждый раз, когда я пытаюсь запустить свои тесты, консоль говорит следующее:

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'
}

Вам нужен отдельный манифест для вашего каталога тестов? Если да, то на что это будет похоже?

Изменить: я безуспешно пытался добавить манифест в свой каталог toolsTest. Обратите внимание, что мне не удалось заставить 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>

person Nick Thoma    schedule 02.06.2014    source источник


Ответы (10)


У меня была такая же ошибка, когда я пытался добавить multiDexEnabled true к build.gradle.

Я добавляю сюда свой опыт, потому что это одно из первых попаданий Google при поиске с сообщением об ошибке ... Unable to find ... ComponentInfo ....

В моем случае добавление testInstrumentationRunner, как здесь, помогло:

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

(у меня com.android.tools.build:gradle:1.5.0)

person Peter Lamberg    schedule 04.01.2016
comment
MultiDexTestRunner устарел developer.android.com/studio/build/multidex - person mrahimygk; 16.05.2021

Я использую Android Studio 1.1, и следующие шаги решили эту проблему для меня:

  1. В Run - Edit Configurations - Android Tests
    Укажите инструментальный бегун как android.test.InstrumentationTestRunner

  2. Затем в окне инструмента «Варианты сборки» (слева) измените тестовый артефакт на Android Instrumentation Tests.

В build.gradle не требуется testInstrumentationRunner, а в файле манифеста не требуется тег инструментирования.

person Liuting    schedule 10.02.2015
comment
Первый шаг необязателен, IDE может разобраться сама. Второй шаг - ключевой, я забыл включить модульные тесты. - person Radu; 26.10.2015
comment
Второй шаг устарел в новейших версиях Android Studio. - person nasch; 09.05.2016
comment
Я вижу только «Инструментальные тесты Android», и на этом экране нет параметров для инструментального запуска. Пожалуйста, удалите свой ответ - person behelit; 16.12.2016

Когда я создал новый пакет, 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 убедитесь, что у вас выбраны Android Instrumentation Tests и правильный buildType.

person VikingGlen    schedule 08.02.2016

Мне пришлось сделать комбинацию ответа от 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
    }
}
person Rock Lee    schedule 10.05.2016
comment
БЛАГОДАРИТЬ. ТЫ. ТАК. МНОГО. - person AdamMc331; 02.06.2016

Что бы это ни стоило, AS 2.3 завис, когда я создал пользовательскую программу запуска тестов после использования обычной программы запуска тестов. Я получил ту же ошибку, что и в вопросе.

Удаление конфигураций отладки для ВСЕХ инструментальных тестов Android и повторное исправление проблемы. Я считаю, что проблема заключалась в том, что вы больше не можете выбрать собственный бегун в конфигурациях отладки, потому что он, скорее всего, встроен через gradle.

person LEO    schedule 14.04.2017
comment
Как удалить конфигурации отладки для ВСЕХ инструментальных тестов Android и перестроить их? - person Shishir Shetty; 27.04.2018
comment
у меня сработало: просто удалил весь каталог сборки - person stoefln; 22.05.2018

Итак, основная проблема заключалась в том, что когда я создал папку androidTest в /src/, IntelliJ не выбрал ее в качестве исходной папки для тестирования (подкаталог java должен стать зеленым). Я использовал IntelliJ 13.0.3, и после обновления до 13.1.3 все мои проблемы исчезли.

*Примечание: не пытайтесь добавить манифест в папку androidTest, в документах Gradle специально указано, что манифест должен создаваться автоматически при создании папки androidTest. Проблема для меня заключалась в том, что файл не создавался, поскольку androidTest не распознавался IntelliJ/Gradle, что приводило к ошибке отсутствия инструментовки.

person Nick Thoma    schedule 13.06.2014
comment
Теперь я получаю сообщение об ошибке в AS 0.8.8. Я создал свою папку androidTest, перетащив ее из нового проекта AS, где он автоматически сгенерирован... Так что похоже, что этот метод не работает... Знаете ли вы, как правильно создать папку androidTest в существующем проекте, который изначально не Имеется? - person Tim Boland; 30.08.2014
comment
У меня похожая проблема. Любое разрешение? (А название - просто массовое совпадение). - person timbo; 02.02.2015
comment
Извините, прошло много времени с тех пор, как я сделал какую-либо работу с Android, я не думаю, что смогу больше помочь - person Nick Thoma; 05.02.2015
comment
@TimBoland создайте новую папку с именем «androidTest» в разделе «app/src». т. е. эта папка должна быть родственной вашей «основной» папке. - person Nicolás Carrasco-Stevenson; 19.01.2016

У меня была эта проблема, и я исправил ее, выбрав «Выполнить» -> «Редактировать конфигурации» -> «Зеленая кнопка +» в левом верхнем углу -> JUnit.

Оттуда установите «использовать мод пути к классам ...» на «приложение» (или имя вашего приложения по умолчанию, которое отображается слева от запуска (кнопка воспроизведения) при запуске приложения)

Наконец, введите имя вашего тестового класса в текстовое поле «класс:». Нажмите применить и все.

На этом этапе, если в тестовом классе нет других ошибок, он должен работать.

person Daniel    schedule 12.05.2016

Это то, что я заметил в своем проекте, в моем модуле приложения (основной) build.gradle у меня была следующая конфигурация buildType

buildTypes {
        debug {
            multiDexEnabled true
        }

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

Когда я использовал AndroidJUnitRunner в качестве средства запуска тестов (оба из Android Studio) и в качестве testInstrumentationRunner в build.gradle, тесты выполнялись без сбоев.

В подмодуле с 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"}

когда я указал AndroidJUnitRunner в IDE и подмодуль build.gradle. И это было исправлено путем указания MultiDexTestRunner в качестве средства запуска тестов в IDE/build.gradle.

Подводя итог, используйте MultiDexTestRunner для запуска тестов, когда в build.gradle указано multiDexEnabled true, в противном случае используйте AndroidJUnitRunner в качестве средства запуска тестов.

person Agnit    schedule 24.11.2016
comment
По какой-то причине наличие MultiDexTestRunner не будет запускать тесты с @RunWith(AndroidJUnit4.class), когда я запускаю connectDebugAndroidTest или createDebugCoverageReport. Однако тесты проходят, когда я запускаю отдельные тесты из студии. Любая поддержка о том, как исправить? - person Ramya K Sharma; 31.05.2017
comment
MultiDexTestRunner больше не рекомендуется. - person 最白目; 08.06.2017

Убедитесь, что приложение было удалено для всех пользователей.

Перейдите в настройки -> приложения (все приложения) -> если ваше приложение есть, нажмите на него -> меню -> удалить для всех пользователей.

Моя проблема заключалась в том, что в какой-то момент приложение было удалено, но все еще на устройстве; это означает, что он не был удален для всех пользователей. (Еще одна проблема, не знаю, как решить. Я единственный пользователь на своем устройстве)

Из-за этого приложение не устанавливалось повторно, а набору тестов не с чем было сравниваться.

person Sababado    schedule 27.08.2018

Решение моей проблемы - изменить имя метода с

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

to

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

Надеюсь, это поможет кому-то.

person Dino Tw    schedule 04.05.2017