Skip to content

ivanovmeya/test-smells

 
 

Repository files navigation

Этот проект содержит Test Smells - примеры плохого дизайна и реализации юнит тестов. Все примеры взяты из реальных пулл-реквестов. Рядом с плохим примером всегда лежит способ избавиться от проблемы, сделав тест лучше.

Смеллы сформулированы так, чтобы на них можно было давать ссылку в пул-реквесте.

Цель проекта - помогать во внедрении юнит-тестирования в новые и существующие проекты.

Код использует JUnit4 тесты с Mockito и Hamcrest, но принципы смеллов не зависят от инструментов, и применимы к любым фреймворкам для тестирования и языкам.

Структура

Смеллы разложены по пакетам в test/java/

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

Например, в пакете code_wall лежит смелл "Стена текста".

В пакетах лежат файлы с тестами, содержащие примеры хороших @Good и плохих @Bad тестов.

Test Smells

know_your_tools

structure

  • multiple_asserts: Методы содержат несколько ассертов
  • many_tests_in_one: Много тестов в одном тестовом методе
  • repeating_setup: Повторяется настройка тестовых методов

readability

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

speed

  • unnecessary_android_test: Используется androidTest там, можно запустить тест на хосте
  • unnecessary_robolectric: Используется Robolectric там, где нет Android специфики

LICENSE

This work is under Apache license

About

Test Smells for Android developers

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 57.2%
  • HTML 32.3%
  • JavaScript 6.1%
  • CSS 4.4%