Модульные тесты с Android Studio и Gradle?

Как я могу добавить модульные тесты в свои Android-проекты в Android Studio (IntelliJ)?

Точнее: я хочу добавить папку с тестовым кодом (JUnit 4) и выполнить оттуда тесты с помощью обычного установленного JDK (не в эмуляторе Android). До сих пор я добавлял тестовые файлы / java / 'в мой модуль и добавлял «test» в качестве источника и junit в качестве тестовой зависимости:

sourceSets { instrumentTest.setRoot('src/test') } dependencies { instrumentTestCompile 'junit:junit:4.+' // ... } 

Когда я сейчас выбираю Run 'All Tests' в папке test / java, он дает мне UnsupportedOperationException.

Что мне не хватает? Как вы запускаете модульные тесты для проектов Android?

Бонусные баллы за рекомендацию плагина, который работает как «Infinitest» в Eclipse, где я могу просто сохранить класс, и его модульный тест будет автоматически выполнен. 🙂

PS: Я не хочу использовать https://github.com/JakeWharton/gradleandroid-test-plugin, поскольку этот плагин, похоже, уже не рекомендуется.

Solutions Collecting From Web of "Модульные тесты с Android Studio и Gradle?"

Я думаю, что ответ должен быть теперь уже в Android Studio 1.1 (и текущий плагин gradle). Они внедрили поддержку модулей тестирования. Это все еще экспериментально, но меньше, чем наши предыдущие усилия здесь. См. Здесь .

Я потратил последние недели (также) на это. На самом деле, на том, что на стероидах, так как мне также пришлось положить Robolectric в горшок.

Короткий ответ: если я не запутаю эту ошибку с чем-то другим, я думаю, что вы пытаетесь запустить модульные тесты с помощью Android testrunner.

Длинный ответ: я закончил с устаревшим плагином (после его попытки, а затем попытался поместить тесты в папку androidTest), потому что он решил для меня некоторые проблемы с Дженкинсом. Недостатком является то, что он не распознает саму папку как код java или android, поэтому завершение кода работает со всем, кроме содержимого папки (например, он правильно видит базовый проект и все зависимости).

Мне нужно было запустить его в Android Studio, чтобы создать тест-тестировщик JUnit (не Android). Вероятно, это не сработает из-за коробки, потому что порядок пути к классам испорчен (хотя он отлично работает, просто запуская тесты в gradle).

В принципе, шаги, которые я должен был сделать, это:

  1. Запустите junit testrunner, чтобы увидеть командную строку, используемую AS
  2. Измените аргумент -classpath следующим образом:

    • Move junit> 3.8 в верхней части строки (я думаю, потому что в противном случае вы получите тот, который находится в android, который слишком стар)
    • Переместите robolectric в качестве второго, если вы ссылаетесь на него, иначе реальные андроидные методы будут найдены до robolectric
    • Добавьте путь вывода тестовых классов в конец, поэтому он найдет ваши тесты (не забудьте завершить тестовые классы с помощью «Тест», иначе они не будут найдены)
  3. Добавляйте -classpath вы только что создали, к параметрам VM для runner после -ea (я нашел это решение или его части во многих местах, очень хорошее: http://kostyay.name/android-studio-robolectric- Gradle-get-work / и применяется также к простым модульным тестам).

Альтернатива, которую я не пробовал, но, по моему мнению, была предложена сегодня утром (см. Последнее сообщение): https://groups.google.com/forum/#!topic/adt-dev/Y8-ppkWell0

Сейчас у меня много разбросанных знаний из-за многих проблем, которые я обнаружил из-за предварительного просмотра SW и тонны информации, которую я должен был пройти, чтобы решить их, но если у вас есть более конкретная проблема по этой теме, просто дайте мне знать: )