Какие автотесты вообще бывают?
Часть 1: Unit-тесты
Юнит-тесты нужны для проверки бизнес-логики.
Не привязаны к андроид-платформе: могут запускаться в джава-модулях без андроид-зависимостей. В идеале можно шерить юнит-тесты между андроид и айос-командами практически безболезненно, чисто свифт на котлин поменять.
Юнит-тесты изолированы в рамках одного слоя и его же они собсна и проверяют; все зависимости от других слоёв/модулей подменяются, чтобы они не влияли на результат проверки. Чтоб не было такого: у меня упал слой 1, потому что я накосячил в слое 2. Если слой 1 покрыт юнит-тестами и они упали – значит, косяк именно в нём, иди проверяй, чё ты там нарефакторил.
Юнит-тест проверяет “единицу поведения“ - это может быть, например, юзкейс, или метод репозитория, или класс утилит. Покрывать юнит-тестами можно или только публичный контракт, или все методы класса, включая приватные – тут кому как нравится.
Я предпочитаю не лезть в дела класса и проверять только контракт, а как он реализуется внутри – не моё собачье дело.
Классическая структура юнит-теста:
given → when → then
Given – всё, что нужно для вызова тестируемого метода. Здесь будет создание всех замоканных данных, необходимых для запуска реального метода, который мы тестируем.
When – вызов реального тестируемого метода.
Then – проверка результата вызова: ассёрты. Можно делать несколько ассёртов в тесте, если результат вызова тестируемого метода к этому располагает.
Важно стараться протестировать ассёртами и тестами все развилки логики if/else. И ни в коем случае не стоит делать if/else в самом юнит-тесте, поскольку иначе при его прохождении/не прохождении будут появляться неоднозначности.
Любое падение юнит-теста должно однозначно свидетельствовать о конкретной проблеме, безо всяких развилок "ну тут или это пошло не так, или вон то".
Юнит-тесты исполняются быстро – из-за того, что они изолированные и у них нет никаких тяжеловесных зависимостей.
Пишутся они тоже быстро, потому что каждый отдельный юнит-тест очень простой, их написание – рутинная работа. Запускать их можно почаще, хоть при каждой локальной сборке, чтобы сразу понимать, где что сломалось.
Кстати, юнит-тесты часто поручают новичкам, чтоб заонбордились в проект и разобрались, как что в нём работает. Так что мотайте на ус, это самый важный тип тестов для начинающих.
Post #143
596
- 🔥 13
- 👍 7
- 💯 2
- ❤ 1
- 🥰 1