Не удалось выполнить тестирование: невозможно найти информацию об инструменте для: 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'
}
Вам нужен отдельный манифест для вашего каталога тестов? Если так, то как бы это выглядело?
Редактировать: я попытался добавить манифест в мой каталог инструментов безуспешно. Обратите внимание, что я не смог заставить 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>
10 ответов
Поэтому основная проблема заключалась в том, что когда я создавал папку androidTest в /src/, IntelliJ не воспринимал ее как исходную папку для тестирования (подкаталог java должен стать зеленым). Я использовал IntelliJ 13.0.3 и после обновления до 13.1.3 все мои проблемы исчезли.
* Примечание: не пытайтесь добавить манифест в вашу папку androidTest, в документации Gradle особо указано, что манифест должен генерироваться автоматически при создании папки androidTest. Проблема для меня заключалась в том, что файл не был сгенерирован, так как AndroidTest не был распознан IntelliJ/Gradle, что приводило к ошибке "Нет инструментария".
У меня была такая же ошибка, когда я пытался добавить 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
)
Я использую Android Studio 1.1, и следующие шаги решили эту проблему для меня:
В
Run - Edit Configurations - Android Tests
Укажите инструментальный бегун какandroid.test.InstrumentationTestRunner
Затем в окне инструмента "Варианты сборки" (слева) измените тестовый артефакт на
Android Instrumentation Tests
,
В build.gradle не требуется testInstrumentationRunner и не требуется тег инструментария в файле манифеста.
Когда я создал новый пакет, 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
выбран.
Я должен был сделать комбинацию ответа ВикингГлена, ответа Лютинга и этого ответа. Этот ответ работает для Android Studio версии 2.1.
Выполнить -> Изменить конфигурации... -> Общие -> Специальный инструментальный бегун (необязательно): "android.support.test.runner.AndroidJUnitRunner"
В
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
}
}
Что бы ни стоило, AS 2.3 зависла, когда я создал пользовательский тестовый прогон после использования обычного тестового прогона. Я получил ту же ошибку, что и в вопросе.
Удаление конфигураций отладки для ВСЕХ инструментальных тестов Android и перестройка исправили это. Я полагаю, что проблема заключалась в том, что вы больше не можете выбирать пользовательский бегун в Конфигурациях отладки, потому что он, скорее всего, встроен через gradle.
Я имел эту проблему и исправил ее, перейдя в "Выполнить" -> "Редактировать конфигурации" -> зеленая кнопка "+" в верхнем левом углу -> JUnit
Оттуда установите 'use the classpath mod...' на 'app' (или имя вашего приложения по умолчанию, которое отображается слева от прогона (кнопка воспроизведения) при запуске приложения)
Наконец, поместите имя вашего тестового класса в текстовое поле "class:". Нажмите применить и все в порядке.
На этом этапе, если в тестовом классе нет других ошибок, он должен работать.
Убедитесь, что приложение было удалено для всех пользователей.
Зайдите в настройки -> приложения (все приложения) -> Если ваше приложение есть, нажмите на него -> меню -> удалить для всех пользователей.
Моя проблема заключалась в том, что приложение в какой-то момент было удалено, но все еще на устройстве; Это означает, что он не был удален для всех пользователей. (Другая проблема, не знаю, как решить. Я единственный пользователь на моем устройстве)
Из-за этого приложение не переустанавливалось, и тестовый набор не имел к чему работать.
Это то, что я заметил в своем проекте, в моем модуле приложения (основной) 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 в качестве тестового прогона.
Решением моей проблемы является изменение имени метода с
@Test
public void test(){
...
}
в
@Test
public void testSomething(){
...
}
Надеюсь, это поможет кому-то.