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

Существует два варианта запуска модульных тестов в Android Studio:

  • Щелкните правой кнопкой мыши файл с помощью модульных тестов (Gradle-Aware Make).
  • testAppDebugUnitTest задача из списка доступных Gradle задач.

Первый состоит из двух задач: - :app:assembleAppDebug и :app:assembleAppDebugUnitTest

Второй - это просто testAppDebugUnitTest.

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

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

Итак, какова разница и почему это рекомендуется, если требуется, чтобы в два раза больше времени для подготовки всего до того, как запущены фактические модульные тесты?

Ответы

Ответ 1

У меня нет большого опыта работы с Gradle, но, конечно, всегда лучше использовать рекомендованные Google Team инструменты, а не другие.

это занимает в два раза больше времени по сравнению со вторым.

Если вы используете новую систему сборки Gradle с Android (или Android Studio), возможно, вы поняли, что даже самый простой вызов Gradle (например, проект Gradle или задания класса) довольно медленный.

Чтобы избежать этого процесса, в студии Android вам нужно Ускорить Gradle время сборки. Это определенно будет иметь значение

Вот несколько шагов, чтобы ускорить время сборки Gradle →

  • В настройках компилятора (Android Studio → Настройки → Проект настройки [ваш проект] → Компилятор (Gradle основанные на Android проекты)), type --offline в поле "Параметры командной строки".

    от ~ 4 минут до ~ 20 секунд.

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

  • По-другому вы можете уменьшить время запуска Gradle (на моем компьютере до двух секунд), если вы скажете Gradle использовать демон для сборки. Просто создайте файл с именем gradle.properties в следующем каталоге:
    • /home/<username>/.gradle/ (Linux)
    • /Users/<username>/.gradle/ (Mac)
    • C:\Users\<username>\.gradle (Windows)

Добавьте эту строку в файл:

org.gradle.daemon=true

Теперь Gradle будет использовать демон для сборки, используя Gradle из командной строки или здания в Android Studio. Вы также можете поместить файл gradle.properties в корневой каталог вашего проекта и передать его в вашу систему SCM. Но вы должны сделать это для каждого проекта (если вы хотите использовать демона в каждом проекте).

Примечание. Если вы не создадите что-либо с Gradle в течение некоторого времени (в настоящее время 3 часа), это остановит демона, так что вы будете испытывать длительное время запуска на следующем построить.

Подробнее см. Создание и запуск приложения через Gradle, а Android Studio работает медленнее, чем через Eclipse

Повышение производительности - одна из великих задач в Gradle дорожной карте на 2015 год (и до 2016 года). Так что надеюсь, хорошо видно, что общая производительность растет за эти годы.

n g + есть обсуждение с разработчиками об этом.

Надеюсь, эта информация поможет вам.

Ответ 2

Причина, по которой ваш вариант 1 занимает вдвое больше времени, заключается в том, что большую часть времени тратится на разворот Gradle и проверку того, являются ли задачи актуальными. Таким образом, запуск сборки no-op сделает ее в два раза длиннее. Вы можете проверить это, запустив его самостоятельно и проверив время, потраченное на занятие no-op.

С помощью gradle работа с параметром "--offline --daemon --parallel" может получить вас где-нибудь (оффлайн полезен, когда у вас медленный доступ в Интернет к репозиториям Maven/JCenter, демон полезен для хранения кешированных файлов и параллель особенно полезна, если вы включили MultiDex и разделили приложение на небольшие модули)

Если вы просто спрашиваете: "Какой самый быстрый способ запустить модульные тесты в Android?" не считая изменений, которые вам нужны, я бы рекомендовал переключиться на Buck (https://buckbuild.com/), что в 10 раз быстрее, чем Gradle на dex- xing и спиннинг, но имеет ограниченную поддержку AS.