Phone icon Связаться с нами

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));
}
Тест на JUnit: подготовить данные, вызвать метод, сравнить результат с ожидаемым.

Частые вопросы

Кто пишет модульные тесты — разработчик или тестировщик?

Обычно разработчик, вместе с кодом: только он знает внутреннее устройство модуля и может отделить его от остальной системы. QA-инженеры отвечают за более высокие уровни — интеграционные и E2E-тесты, где систему проверяют снаружи.

Что такое моки и заглушки?

Это заменители настоящих зависимостей: вместо обращения к базе или платёжному сервису тест использует упрощённую замену с заранее известным ответом. Так тест становится быстрым, не зависит от внешних систем и даёт одинаковый результат при каждом запуске.

Какое покрытие тестами считается достаточным?

Универсального числа нет, и сам показатель может вводить в заблуждение: можно иметь 80% покрытия и не проверять ни одного важного сценария. Практичнее ориентироваться на риски — тщательно покрывать сложную логику и денежные расчёты, а простой код оставлять без тестов.

Что такое TDD?

Разработка через тестирование: сначала пишут тест, который не проходит, потом минимальный код, чтобы он прошёл, а потом улучшают решение. Подход дисциплинирует и улучшает структуру кода, но требует привычки и подходит не для всех задач — особенно когда требования ещё меняются.

Обучение тестированию в OWU

Освойте профессию QA-инженера на практических курсах с менторами и реальными проектами.

Выбрать курс