Unit тесты
@Test
fun addition_isCorrect() {
val calculator = Calculator()
assertEquals(4, calculator.add(2, 2))
}
Контекст:
- Уровень изоляции: Тестируют отдельные компоненты (классы, методы) в изоляции от других частей системы
- Скорость: Выполняются очень быстро (миллисекунды на тест)
- Зависимости: Используют mock-объекты (Mockito) для изоляции тестируемого кода
- Цель: Проверка бизнес-логики, алгоритмов, преобразования данных
- Инструменты: JUnit, Mockito, Truth, Hamcrest
- Расположение:
src/test/java/
Когда использовать:
- Тестирование отдельных методов класса
- Проверка сложных алгоритмов
- Валидация преобразования данных
UI тесты
@Test
fun loginButton_click_showsWelcomeMessage() {
onView(withId(R.id.login_button))
.perform(click())
onView(withText("Welcome!"))
.check(matches(isDisplayed()))
}
Контекст:
- Уровень изоляции: Тестируют приложение как целое (или большие компоненты)
- Скорость: Выполняются медленно (секунды на тест)
- Зависимости: Требуют эмулятора/устройства или Robolectric
- Цель: Проверка взаимодействия с UI и интеграции компонентов
- Инструменты: Espresso, UI Automator, Robolectric
- Расположение:
src/androidTest/java/
Когда использовать:
- Тестирование взаимодействия между Activity/Fragment
- Проверка корректности отображения UI
- Энд-ту-энд сценарии пользовательского потока
Ключевые отличия
Характеристика | Unit тесты | UI тесты |
Скорость выполнения | Быстрые | Медленные |
Уровень тестирования | Низкий (код) | Высокий (UI) |
Зависимости | Mock-объекты | Реальная система |
Стоимость поддержки | Низкая | Высокая |
Покрытие | Логика | Пользовательский опыт |
Best Practices
- Пирамида тестирования: 70% Unit, 20% Integration, 10% UI
- Избегайте дублирования: Не тестируйте в UI тестах то, что можно проверить Unit-тестами
- Идемпотентность: UI тесты должны быть независимыми и воспроизводимыми
Резюмируем:
Unit тесты фокусируются на отдельных компонентах в изоляции, тогда как UI тесты проверяют интеграцию компонентов и пользовательский интерфейс. Оба типа дополняют друг друга в комплексной стратегии тестирования.