Настройка JUnit 5 для использования в Android: проблемы и их решения | Статья в сборнике международной научной конференции

Отправьте статью сегодня! Журнал выйдет 17 августа, печатный экземпляр отправим 21 августа.

Опубликовать статью в журнале

Автор:

Рубрика: 1. Информатика и кибернетика

Опубликовано в

IV международная научная конференция «Технические науки: теория и практика» (Казань, ноябрь 2018)

Дата публикации: 23.10.2018

Статья просмотрена: 149 раз

Библиографическое описание:

Денисенко А. А. Настройка JUnit 5 для использования в Android: проблемы и их решения [Текст] // Технические науки: теория и практика: материалы IV Междунар. науч. конф. (г. Казань, ноябрь 2018 г.). — Казань: Молодой ученый, 2018. — С. 10-14. — URL https://moluch.ru/conf/tech/archive/312/14586/ (дата обращения: 15.10.2019).



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.

Единственная проблема данного подхода возникает при попытке запуска тестов через командную строку:

https://i1.wp.com/blog.stylingandroid.com/wp-content/uploads/2017/02/Commandline-no-Vintage.png?ssl=1

Отчет по выполнению тестов говорит нам что выполнился только один тест, но у нас написано 2 теста. Проблема заключается в том, что только junit-jupiter был найден, для выполнения тестов. Чтобы решить данную проблему нужно добавить junit-vintage в build.gradle файл:

testRuntimeOnly «org.junit.vintage:junit-vintage-engine:5.2.0"

Тесты, как и раньше, работают если запускать с Android Studio, и кроме это теперь их можно запускать через командную строку:

https://i1.wp.com/blog.stylingandroid.com/wp-content/uploads/2017/02/Commandline-with-Vintage.png?ssl=1

В этой статье были изложены основы JUnit 5, рассказано, как настроить Android-проект на использование JUnit 5, описаны проблемы, связанные с этим, и пути их решения.

Литература:

  1. JUnit 5 // JUnit 5. URL: https://junit.org/junit5/ (дата обращения: 20.10.2018).
  2. JUnit 5: Getting Started // Styling Android. URL: https://blog.stylingandroid.com/junit-5-getting-started/ (дата обращения: 20.10.2018).
Основные термины (генерируются автоматически): тест, JVM, выполнение тестов, командная строка, плагин, проблема.

Похожие статьи

Тестирование графического интерфейса (GUI testing)

Тестирование GUI является процесс тестирования графического пользовательского интерфейса системы из тестируемого приложения. Тестирование GUI участвует проверку экранов с элементами управления, такими как кнопки меню, иконка и все виды баров – панели...

Разработка клиент серверного приложения “TEST-DRIVE”

Предполагает возможность проведения тестов как индивидуально, так и для группы пользователей.

На панели «Настройка» можно определить количество задач, время выполнение в одном тесте (в секундах), количество тестов.

Анализ и выбор тестовых алгоритмов для проведения...

«MarchRAW» (26N) — тест способен обнаруживать неисправности в работе дешифратора адресов, связи двух ячеек матрицы памяти и ошибки связанные с одиночными ячейками. «MarchRAW» − это один из самых современных тестовых алгоритмов из целой серии тестов...

Клиентские обнаружения веб-прокси из непривилегированных...

Для решения второй проблемы мы используем комбинацию функций, которые

При изменении количества тестов от 2 до 10 мы обнаружили, что 4 датчика были лучшими номерами для

Мы используем 4 датчика для каждого теста, т. е. для каждого назначения мы собираем четыре...

Технология тестирования программных модулей

Тестирование программ является одним из самых длительных и ответственных этапов разработки. Особое значение придается ему в парадигмах структурного и надежного программирования.

Тестирование как форма контроля результатов обучения

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

Анализ и сравнение методов контроля при проведении...

Электронное тестирование качественно отличается от тестирования, выполняемого на бумажном носителе, благодаря

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

Исследование эффективности автоматизированной проверки...

Набор тестов — набор данных, которые используются для проверки решения на правильность.

Подготовка тестов — сложный процесс, требующий высокой квалификации, если учитывать требование, что в тестовом наборе ни в коем случае не должно быть ошибок.

О компьютерном тестировании в учебном процессе

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

Похожие статьи

Тестирование графического интерфейса (GUI testing)

Тестирование GUI является процесс тестирования графического пользовательского интерфейса системы из тестируемого приложения. Тестирование GUI участвует проверку экранов с элементами управления, такими как кнопки меню, иконка и все виды баров – панели...

Разработка клиент серверного приложения “TEST-DRIVE”

Предполагает возможность проведения тестов как индивидуально, так и для группы пользователей.

На панели «Настройка» можно определить количество задач, время выполнение в одном тесте (в секундах), количество тестов.

Анализ и выбор тестовых алгоритмов для проведения...

«MarchRAW» (26N) — тест способен обнаруживать неисправности в работе дешифратора адресов, связи двух ячеек матрицы памяти и ошибки связанные с одиночными ячейками. «MarchRAW» − это один из самых современных тестовых алгоритмов из целой серии тестов...

Клиентские обнаружения веб-прокси из непривилегированных...

Для решения второй проблемы мы используем комбинацию функций, которые

При изменении количества тестов от 2 до 10 мы обнаружили, что 4 датчика были лучшими номерами для

Мы используем 4 датчика для каждого теста, т. е. для каждого назначения мы собираем четыре...

Технология тестирования программных модулей

Тестирование программ является одним из самых длительных и ответственных этапов разработки. Особое значение придается ему в парадигмах структурного и надежного программирования.

Тестирование как форма контроля результатов обучения

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

Анализ и сравнение методов контроля при проведении...

Электронное тестирование качественно отличается от тестирования, выполняемого на бумажном носителе, благодаря

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

Исследование эффективности автоматизированной проверки...

Набор тестов — набор данных, которые используются для проверки решения на правильность.

Подготовка тестов — сложный процесс, требующий высокой квалификации, если учитывать требование, что в тестовом наборе ни в коем случае не должно быть ошибок.

О компьютерном тестировании в учебном процессе

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