Загрузка данных


Практика 13. Тестирование Android-приложений

Цель и задачи

Освоить основы тестирования Android-приложений: научиться писать unit-тесты для ViewModel и логики с использованием JUnit, MockK и Truth, применять runTest и StandardTestDispatcher для тестирования корутин, использовать Dispatchers.setMain для подмены главного диспетчера, а также понимать разницу между unit-тестами (JVM) и инструментальными тестами (на устройстве).

Что сделано

Добавление тестовых зависимостей mockk, truth, turbine в build.gradle.kts продемонстрировано на рисунке 1.

Создание NotesViewModelTest.kt с 15 unit-тестами для ViewModel показано на рисунке 2.

Подмена главного диспетчера через Dispatchers.setMain(StandardTestDispatcher()) в @Before и восстановление через resetMain() в @After представлены на рисунке 3.

Использование runTest вместе с advanceUntilIdle() для прогонки отложенных корутин продемонстрировано на рисунке 4.

Проверка существующих тестов CoroutinesTest (9 тестов из Практики 5) показана на рисунке 5.

Проверка существующих тестов MiniJsonTest (9 тестов из Практики 12) представлена на рисунке 6.

Результат прохождения всех 15 тестов NotesViewModelTest — 15 зелёных галочек — показан на рисунке 7.

Вывод

Освоено unit-тестирование Android-приложения: JUnit4 для структуры тестов, MockK для создания моков, Truth для читаемых assertions, runTest + StandardTestDispatcher + advanceUntilIdle для тестирования корутин с виртуальным временем. Освоена подмена Dispatchers.Main через Dispatchers.setMain() — обязательный приём при тестировании ViewModel на JVM. Итого по проекту написано 33 unit-теста: CoroutinesTest (9), MiniJsonTest (9), NotesViewModelTest (15). Все тесты зелёные. Осознанно пропущены NoteDaoTest и NoteCardTest — Room и Hilt в текущем окружении не компилируются из-за несовместимости KSP с Gradle 9.6.

---

Так? Скажи «дальше» — Практика 14.