QA и тестирование
Что такое модульное тестирование (unit-тесты)?
Модульное тестирование (unit testing, unit-тесты) — это проверка отдельной небольшой части кода, функции или класса, отдельно от остальной системы. Такой тест не обращается к базе данных и внешним сервисам — вместо них используют заглушки.
Unit-тесты — самый быстрый и дешёвый уровень проверки. Они выполняются за миллисекунды, запускаются сотнями при каждой сборке и точно показывают место поломки: упавший тест сразу указывает на конкретную функцию.
Обычно их пишет сам разработчик. Кроме защиты от ошибок, они дают свободу менять код: его можно переписывать, зная, что изменение поведения будет сразу замечено.
Где применяется
Модульные тесты пишет разработчик, как правило, вместе с кодом функции. Их запускают на своём компьютере перед отправкой изменений и автоматически в CI — сотни таких тестов выполняются за секунды, поэтому они становятся первой линией защиты от ошибок.
В первую очередь ими покрывают логику, где легко ошибиться: расчёт цены со скидками и налогами, проверку данных, работу с датами и валютами, граничные условия. Сетевые запросы и обращения к базе заменяют заглушками, иначе тест перестаёт быть модульным и становится медленным.
Пример
Функция считает стоимость заказа со скидкой. Тесты проверяют обычный случай, нулевую сумму, скидку 100% и отрицательное количество. Любое будущее изменение формулы сразу покажет, какое из этих условий перестало выполняться.
@Test
void appliesPercentDiscount() {
Order order = new Order(new BigDecimal("1000"));
BigDecimal total = pricing.applyDiscount(order, 15);
assertEquals(new BigDecimal("850"), total);
}
@Test
void rejectsNegativeDiscount() {
Order order = new Order(new BigDecimal("1000"));
assertThrows(IllegalArgumentException.class,
() -> pricing.applyDiscount(order, -5));
}
Частые вопросы
Кто пишет модульные тесты — разработчик или тестировщик?
Обычно разработчик, вместе с кодом: только он знает внутреннее устройство модуля и может отделить его от остальной системы. QA-инженеры отвечают за более высокие уровни — интеграционные и E2E-тесты, где систему проверяют снаружи.
Что такое моки и заглушки?
Это заменители настоящих зависимостей: вместо обращения к базе или платёжному сервису тест использует упрощённую замену с заранее известным ответом. Так тест становится быстрым, не зависит от внешних систем и даёт одинаковый результат при каждом запуске.
Какое покрытие тестами считается достаточным?
Универсального числа нет, и сам показатель может вводить в заблуждение: можно иметь 80% покрытия и не проверять ни одного важного сценария. Практичнее ориентироваться на риски — тщательно покрывать сложную логику и денежные расчёты, а простой код оставлять без тестов.
Что такое TDD?
Разработка через тестирование: сначала пишут тест, который не проходит, потом минимальный код, чтобы он прошёл, а потом улучшают решение. Подход дисциплинирует и улучшает структуру кода, но требует привычки и подходит не для всех задач — особенно когда требования ещё меняются.
Обучение тестированию в OWU
Освойте профессию QA-инженера на практических курсах с менторами и реальными проектами.
Выбрать курс