Почему тестовый бегун Android сообщает «Пустой набор тестов»?

Я стучу головой о стену, пытаясь понять, почему IntelliJ / Android сообщает «Пустой набор тестов». У меня небольшой проект с двумя модулями IntelliJ («Проекты» в Eclipse). Модуль тестирования модуля имеет свой собственный AndroidManifest.xml, который я вставил внизу. Я пытаюсь запустить ActivityUnitTestCase , так как тесты будут зависеть от объекта Context .

Имя пакета основного модуля – nilzor.myapp . Имя nilzor.myapp.tests тестового модуля – nilzor.myapp.tests

Почему тестовый бегун не обнаруживает метод testBlah() в качестве теста?

           ?           

И вот мой тестовый class :;

 package nilzor.myapp.tests; public class NilzorSomeTest extends ActivityUnitTestCase{ public NilzorSomeTest(Class activityClass){ super(activityClass); } @SmallTest public void testBlah(){ assertEquals(1,1); } } 

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

Некоторые из вопросов, о которых я до сих пор не уверен, – это:

  1. Нужна ли мне аннотация над методом тестирования Unit?
  2. Нужно ли префикс метода «test», или это только для тестов JUnit?
  3. Могу ли я иметь тесты в nilzor.myapp.tests ?

Но главный вопрос этого поста – почему тестовый бегун не обнаруживает мой тест ?

Вам необходимо предоставить конструктор по умолчанию для вашего тестового classа, например:

 package nilzor.myapp.tests; public class NilzorSomeTest extends ActivityUnitTestCase{ public NilzorSomeTest(){ super(ActivityYouWantToTest.class); } @SmallTest public void testBlah(){ assertEquals(1,1); } } 

о других вопросах:

  1. Нет. Мои тесты все еще выполняются без каких-либо аннотаций, но я думаю, что это хорошая практика, чтобы иметь их. Он позволяет указать размер тестов для запуска. См. Что такое @SmallTest, @MediumTest и @LargeTest annotations в Android? для более подробной информации.

  2. Да, вам нужен «тестовый» префикс. InteliJ дает предупреждение «метод никогда не используется», когда нет префикса «тест» и пропускает этот метод во время тестового прогона.

  3. Да. У меня мои тесты организованы в подпакеты, и, похоже, он работает хорошо.

Если это происходит «внезапно» или «это работало 5 минут назад», моим решением было перейти в конфигурации Run / Debug и удалить любые конфигурации в разделе «Android Tests». Иногда эти конфигурации повреждаются, если я реорганизую тестируемый class (например, перейдя на новый пакет).

введите описание изображения здесь

Ни один из вышеперечисленных не исправил это для меня. Что помогало следовать инструкциям :

Создание тестовой конфигурации

В Android Studio:

  • Открыть меню «Выполнить» -> « Изменить конфигурации»
  • Добавить новую конфигурацию Android Tests
  • Выберите модуль
  • Добавьте специальный измерительный прибор:

  android.support.test.runner.AndroidJUnitRunner 

Запустите вновь созданную конфигурацию.

У меня была аналогичная проблема. Не знаю, почему это происходит, но я смог исправить это, перейдя к: «Файл»> «Invalidate Caches / Restart» в Android Studio.

Я не знаю, помогает ли это для Android Studio, но у меня был какой-то конфликт Intellij-Gradle. Решил его «щелкнуть правой кнопкой мыши» в тестовом файле и нажать «компилировать файл … Test.java». После этого я снова смогу запустить одиночные тесты.

У меня была такая же проблема на Android Studio 2.3.1, оказалось, что это просто ошибка с AS. Выполнение того же теста в версии 2.2.1 выполняется отлично.

Если вы используете только Android Studio на канале Cannary, я рекомендую вам также установить стабильную версию. http://tools.android.com/tips/using-multiple-android-studio-versions

У меня были тесты, которые работали нормально до gradle пор, пока gradle и андроид не была обновлена.

Помимо добавления конструктора по умолчанию к вашим тестам, вам может потребоваться выполнить некоторые из этих действий, чтобы заставить ваш тестовый набор работать

В разделе src/ create androidTest/java//test . Обратите внимание на androidTest . Все остальное, включая instrumentTest , не будет работать.

Добавьте это в build.gradle

 sourceSets { testLocal { java.srcDir file('src/androidTest/java') resources.srcDir file('src/androidTest/resources') } } android{ sourceSets { instrumentTest.setRoot('src/androidTest/') } } dependencies{ testLocalCompile 'junit:junit:4.11' } task localTest(type: Test, dependsOn: assemble) { testClassesDir = sourceSets.testLocal.output.classesDir android.sourceSets.main.java.srcDirs.each { dir -> def buildDir = dir.getAbsolutePath().split('/') buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') sourceSets.testLocal.compileClasspath += files(buildDir) sourceSets.testLocal.runtimeClasspath += files(buildDir) } classpath = sourceSets.testLocal.runtimeClasspath } check.dependsOn localTest 

Добавьте это в AndroidManifest.xml

   

Для Intellij 15 я решил эту проблему:

  1. Открытие настроек «Структура проекта»
  2. Нажав «Модули» (слева)
  3. Вкладка «Источники»
    а. Щелкните правой кнопкой мыши на исходном каталоге (обычно src), щелкнув «Источник».
    б. Щелкните правой кнопкой мыши на своем тестовом каталоге, нажав «Test»
    с. Щелкните правой кнопкой мыши на своем внешнем каталоге, нажмите «Исключено»
  4. Перейдите на вкладку «Контуры»
    а. Нажмите переключатель «Использовать путь компиляции вывода модуля»
    б. Выберите каталог выходного пути для «Выходной путь»
    с. Выберите каталог тестового пути для ‘Test output Path’
  5. Нажмите ОК.

Очевидно, что вам нужно целевое устройство для запуска тестов, поскольку они являются инструментальными тестами. По некоторым причинам студия Android иногда не просит вас указать на это целевое устройство и просто вызвать сообщение «Empty Test Suite». Есть несколько способов исправить это, вот несколько:

  • запустите основное приложение и выберите целевое устройство или

  • перейдите в конфигурацию Run (Run / Run … / Edit Configurations) и измените параметры целевого назначения развертывания

В моем случае эта проблема возникла из-за ошибки в моем коде, на самом деле это было в classе приложения, поэтому целевая активность не была открыта и тестовые выходные данные

Ошибка пустого тестового набора

Я попытался запустить тесты непосредственно с терминала с помощью приложения adb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner . При этом он печатает для вас гораздо больше об исключении.

Ни один из других решений не работал для меня, но я смог заставить это работать, просто удалив существующее приложение или набор тестов, а затем выполнив тесты.

В моем случае в проекте, над которым я работал, было несколько модhive. Ни одно из решений, которые я нашел для этой ошибки, не помогло мне, и почему-то я понял, что если бы я добавил зависимости тестирования в BOTH файлов build.gradle, тесты волшебным образом начали работать. Не имеет значения, живут ли ваши тесты только в одном из модhive, оба файла gradle должны включать зависимости и значение testInstrumentationRunner.

Итак, если мне нравится, ни один из других ответов не помог вам, попробуйте добавить эти строки в файл build.gradle каждого из ваших модhive:

 android { .... defaultConfig { ... testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } 

а затем добавьте:

 dependencies { ... // Test androidTestCompile 'com.android.support:support-annotations:23.4.0' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5' } 

В моем случае ни один из предыдущих ответов не работал. Решением было просто переместить тестовый class в другой пакет .

Это произошло в androidTest/

Я просто переименовал файл и проблема исправлена.

У меня была та же проблема, и причина в том, что у моего тестового classа не было теста в конце имени classа!

Эта статья помогла мне: пустой набор тестов

В принципе мне пришлось создать пакет – instrumentTest / java – в моем каталоге src и поместить все тесты там. Тогда я мог бы выполнить эти тесты индивидуально.

У меня был необработанный Java-проект, где это происходило. Просто Java + JUnit4. Он определенно живет с чем-то в ваших файлах .idea / или .iml. Я поменял мой, повторно импортировал, и, наконец, тесты снова начались.

Класс теста может быть исключен из компиляции. Исправить это в параметре-компилятор-исключить.

Вот мои шаги отладки, которые я просматриваю, когда Android Studio внезапно решает прекратить выполнение тестов / отладки (И мальчик это случается смутно!):

  • Построение: → Реконструкция проекта
  • Перезагрузите устройство: перезагрузите устройство / эмулятор и повторите попытку.
  • Переключатель устройства: если у вас есть как обычный телефон, так и эмулятор отключите один из них и попробуйте запустить его только с одним из устройств
  • Android Studio: Файл -> Недействительные кеши и перезагрузка
  • Монитор активности / диспетчер задач: сортируйте процессы по имени, посмотрите, есть ли безымянные процессы, которые используют много баранов, это «призрачный» процесс из студии Android, который должен быть убит
  • git revert: попробуйте записать / вернуть ваш последний код. Иногда возникает ошибка компиляции, которую Android Studio / gradle пропускает, и она просто попытается запустить несовместимый код.
  • Удалите, затем переустановите Android Studio.

Я добавлю больше исправлений, когда я натыкаюсь на них!

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

В студии Android с основанием spock я изменил версию своего gradleиента с 2.2.2 до 3.2.1, и все идет хорошо.

Принятый ответ не решил мою проблему. Поэтому я решил скопировать ExampleInstrumentedTest который был создан по умолчанию в Android Studio и работает без каких-либо проблем, переименовал его во время процесса копирования (без Refactor-> Rename после копирования!) И вставил содержимое моего модульного теста в него. После этого ошибка исчезла.

Я испытал ошибку «Empty test suite» при попытке запуска локальных тестов в моем проекте Android Studio 3.0.

Прочитав документацию разработчика Android, я быстро понял, что проблема была вызвана моей конфигурацией gradle, которая включала следующие строки.

 testImplementation 'com.android.support.test:runner:0.5' testImplementation 'com.android.support.test:rules:0.5' 

Класс AndroidJUnitRunner – это тестовый бег JUnit, который позволяет запускать тестовые classы JUnit 3- или JUnit 4 на устройствах Android .

Поскольку мои тесты были локальными и поэтому не требовались для запуска на любом устройстве, удаление вышеуказанных записей com.android.support.test … позволило мне выполнить модульные тесты.

Я делал некоторые вставки в db в методе @BeforeClass. Я понял, что у меня проблема с отображением объекта / базы данных. Эта проблема сопоставления данных была причиной этой проблемы для меня.

У меня была эта проблема, потому что у меня было это в моем build.gradle:

 testOptions { execution "ANDROID_TEST_ORCHESTRATOR" } 

Даже несмотря на то, что я не использовал Android Test Orchestrator (должен быть скопирован из учебников по ошибке).

Комментируя это, я решил это для меня.

В моем случае у меня были мои инструментальные тесты в androidTest/java//MyTestingClass , но я установил свой текущий вариант сборки на «предварительную подготовку». И есть смысл! Как указано в документации Android Studio :

По умолчанию все тесты выполняются против типа сборки отладки.

Класс сообщений Class not found. Empty test suite. Class not found. Empty test suite. продолжал появляться, пока я не сделал это:

  1. Добавьте эту строку в мой build.gradle :

     android{ [...] testBuildType "preproduction" } 
  2. Синхронизированная gradleация.
  3. Удалите предыдущие тестовые конфигурации, поскольку они не учитывают эту синхронизацию Gradle.

Затем я снова выполнил тесты, и на этот раз они просто отлично!

Моя проблема была вызвана тем, что исключение было @BeforeClass методом @BeforeClass моего тестового примера. Это как-то не вызвало провал теста – я нашел его только путем проверки вывода logcat.

Я исправил исключение, и внезапно мои тесты были запущены!

Сегодня столкнувшись с проблемой – не имея возможности запускать проверочные тесты на Android с ошибкой Empty suite, я нашел проблему с git об этой проблеме, и благодаря Стефану Линцнеру я смог запустить тесты.

tl; dr Вы должны щелкнуть правой кнопкой мыши тестовый пакет, а не class, чтобы выполнить тесты.

Ссылка: https://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863

Мне это случилось со мной, когда я ошибочно пометил неclassическую переменную classа с аннотацией @Mock Удалил аннотацию, и тесты прошли успешно. Это произошло с Junit 4.5 на Android Studio

  • Загрузите изображение с помощью Google Volley
  • Я получаю исключение NullPointerException, когда я использую ACTION_IMAGE_CAPTURE, чтобы сделать снимок
  • Общая библиотека отсутствует в android.
  • Лучший способ реализовать View.OnClickListener в android
  • Как экспортировать библиотеку в Jar в Android Studio?
  • Отправка и анализ объектов JSON в Android
  • Используйте настраиваемую панель контекстных действий для выбора текста WebView
  • получить контактную информацию от android contact picker
  • Анимированная иконка для ActionItem
  • обновить fragment UI от fragmentа.
  • Android - преобразовать classы с Dex для отладки
  • Давайте будем гением компьютера.