Этот проект содержит Test Smells
- примеры плохого дизайна и реализации юнит тестов. Все примеры взяты из реальных пулл-реквестов. Рядом с плохим примером всегда лежит способ избавиться от проблемы, сделав тест лучше.
Смеллы сформулированы так, чтобы на них можно было давать ссылку в пул-реквесте.
Цель проекта - помогать во внедрении юнит-тестирования в новые и существующие проекты.
Код использует JUnit4
тесты с Mockito
и Hamcrest
, но принципы смеллов не зависят от инструментов, и применимы к любым фреймворкам для тестирования и языкам.
Смеллы разложены по пакетам в test/java/
Идентификатор смела это имя пакета.
Например, в пакете code_wall
лежит смелл "Стена текста".
В пакетах лежат файлы с тестами, содержащие примеры хороших @Good
и плохих @Bad
тестов.
- catch_exception: Обработка ожидаемых исключений
- inherit_for_verify: Наследование для отслеживания переданных аргументов
- robolectric_shared_preferences: Сброс SharedPreferences после Robolectric теста
- multiple_asserts: Методы содержат несколько ассертов
- many_tests_in_one: Много тестов в одном тестовом методе
- repeating_setup: Повторяется настройка тестовых методов
- code_wall: Стена текста
- inherit_for_verify: Наследование для отслеживания переданных аргументов
- modify_global: Изменение глобального состояния
- random: Недетерминированные тесты
- thread_sleep: Используется
Thread#sleep
- visible_for_testing: Код только для тестов AKA
@VisibleForTesting
- inherit_for_override: Наследование проверяемого класса для переопределения поведения
- long_name: Слишком длинное имя тестового метода
- older_prefix: Лишние префиксы в названии тестов
- no_action_or_assertion: В имени теста нет действия или проверяемых условий
- forgotten_option: Тест одного исхода
- unnecessary_android_test: Используется
androidTest
там, можно запустить тест на хосте - unnecessary_robolectric: Используется Robolectric там, где нет Android специфики
This work is under Apache license