Настройка JUnit 5 для использования в Android: проблемы и их решения
Автор: Денисенко Алексей Александрович
Рубрика: 1. Информатика и кибернетика
Опубликовано в
IV международная научная конференция «Технические науки: теория и практика» (Казань, ноябрь 2018)
Дата публикации: 23.10.2018
Статья просмотрена: 843 раза
Библиографическое описание:
Денисенко, А. А. Настройка JUnit 5 для использования в Android: проблемы и их решения / А. А. Денисенко. — Текст : непосредственный // Технические науки: теория и практика : материалы IV Междунар. науч. конф. (г. Казань, ноябрь 2018 г.). — Казань : Молодой ученый, 2018. — С. 10-14. — URL: https://moluch.ru/conf/tech/archive/312/14586/ (дата обращения: 15.11.2024).
JUnit 5 официально был выпущен в Июле 2016 года, этот релиз несет в себе достаточно большие изменения. JUnit 4 был стандартом для юнит-тестирования в Android с самого выхода Android на сцену. В этой статье мы рассмотрим некоторые основы фреймворка и настроим его для работы с Android проектом.
Одно из наиболее значимых изменений JUnit 5 — это то, что теперь фреймворк состоит с нескольких компонентов. JUnit Platform — основа платформы, которая позволяет запускать разные тест-фреймворки на JVM. JUnit Jupiter — сердце платформы. Предоставляет новые возможности для создания тестов и разработки собственных расширений. И наконец-то, JUnite Vinatage, который предоставляет поддержку старых тестов, это тестовый фреймворк, на котором можно запускать все JUnit 4 тесты. Эти три компонента и являют собою JUnit 5. На основании вышеописанного, можно сказать, что при всех значительных изменениях платформы, она все еще предоставляет полную работоспособность тестов, написанных на JUnit 4.
Рассмотрим теперь настройку JUnit 5 для операционной системы Android. Наиболее очевидное место чтобы начать — официальная документация (https://junit.org/junit5/docs/current/user-guide), секция 4.2.1 описывает как настроить JUnit 5 для Gradle. Но, если следовать инструкциям и просто добавить Gradle плагин для JUnit 5 сборка проекта не будет работать:
Причиной является то, что JUnit 5 работает с Gradle плагином для Java, который определяет другую иерархию задач (task) чем Android Gradle плагин. Если мы работаем с чистой Java в нашем проекте — данная настройка будет работать без проблем, но, когда мы пробуем запустить юнит-тесты, в Android проекте, возникают проблемы. Так что, чтобы работать с JUnit 5 в Android нам нужен другой плагин. К счастью, уже имеется готовое решение.
Чтобы его использовать, мы должны убрать все что мы только-что добавили в результате настройки. Далее нам нужно добавить необходимые настройки чтобы плагин работал как часть системы:
buildscript {
dependencies {
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.2.0.0"
}
}
apply plugin: "de.mannodermaus.android-junit5"
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
// (Required) Writing and executing Unit Tests on the JUnit Platform
testImplementation "org.junit.jupiter:junit-jupiter-api:5.2.0"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.2.0"
// (Optional) If you need "Parameterized Tests"
testImplementation "org.junit.jupiter:junit-jupiter-params:5.2.0"
// (Optional) If you also have JUnit 4-based tests
testImplementation "junit:junit:4.12"
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:5.2.0"
testImplementation("org.assertj:assertj-core:3.11.1")
}
Теперь можно использовать JUnit 5 для написания тестов. Стоит заметить, что нам все еще нужно включать зависимость JUnit 4.12 так как test runner Android Studio не будет работать без этого.
Теперь создадим два теста и проверим что тесты работаю. Это будут два «Hello world!» теста, первый на JUnit 4:
Второй будет создан с помощью JUnit 5:
Сейчас единственное отличие, этих двух тестов в выделенной строке.
Теперь мы можем сконфигурировать исполнитель тестов в Android Studio. Нужно выбрать «Edit Configurations…» в выпадающем списке, на панели инструментов:
Создаем конфигурацию Android JUnit:
Если мы запустим данную конфигурацию, мы увидим, что тесты запустились и успешно прошли:
Стоит обратить внимание что тест, который был написан на JUnit 4, выполнился с помощью JUnit Vintage, а написанный с помощью JUnit 5 — на JUnit Jupiter.
Единственная проблема данного подхода возникает при попытке запуска тестов через командную строку:
Отчет по выполнению тестов говорит нам что выполнился только один тест, но у нас написано 2 теста. Проблема заключается в том, что только junit-jupiter был найден, для выполнения тестов. Чтобы решить данную проблему нужно добавить junit-vintage в build.gradle файл:
testRuntimeOnly «org.junit.vintage:junit-vintage-engine:5.2.0"
Тесты, как и раньше, работают если запускать с Android Studio, и кроме это теперь их можно запускать через командную строку:
В этой статье были изложены основы JUnit 5, рассказано, как настроить Android-проект на использование JUnit 5, описаны проблемы, связанные с этим, и пути их решения.
Литература:
- JUnit 5 // JUnit 5. URL: https://junit.org/junit5/ (дата обращения: 20.10.2018).
- JUnit 5: Getting Started // Styling Android. URL: https://blog.stylingandroid.com/junit-5-getting-started/ (дата обращения: 20.10.2018).
Похожие статьи
Использование команд MATLAB — от версии к версии
Рассмотрены отличительные особенности команд пакетов MATLAB 6.5 и MATLAB 7.11 при использовании их как серверов OLE автоматизации при решении за-дач автоматического управления. Приведены конкретные рабочие примеры, которые легко можно повторить.
Применение Wolfram Mathematica для анализа работы модели безопасности Take-Grant
В работе представлен пакет расширения, реализованный авторами в рамках си-стемы Mathematica и предназначенный для исследования модели безопасности Take-Grant. Приведено описание функций и команд, используемых в данном пакете.
Hibernate-6: обзор изменений и преимуществ
Современное развитие технологий требует обновления фреймворков. Данная статья анализирует изменения в Hibernate при переходе с 5 на 6 версию. Рассматриваются новые возможности, изменения в API и аннотациях, а также предоставляются практические советы...
Похожие статьи
Использование команд MATLAB — от версии к версии
Рассмотрены отличительные особенности команд пакетов MATLAB 6.5 и MATLAB 7.11 при использовании их как серверов OLE автоматизации при решении за-дач автоматического управления. Приведены конкретные рабочие примеры, которые легко можно повторить.
Применение Wolfram Mathematica для анализа работы модели безопасности Take-Grant
В работе представлен пакет расширения, реализованный авторами в рамках си-стемы Mathematica и предназначенный для исследования модели безопасности Take-Grant. Приведено описание функций и команд, используемых в данном пакете.
Hibernate-6: обзор изменений и преимуществ
Современное развитие технологий требует обновления фреймворков. Данная статья анализирует изменения в Hibernate при переходе с 5 на 6 версию. Рассматриваются новые возможности, изменения в API и аннотациях, а также предоставляются практические советы...