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