Что такое модульное тестирование (Unit Testing)?

«Что такое модульное тестирование (Unit Testing)?» — вопрос из категории Основы тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Модульное тестирование (Unit Testing) — это уровень тестирования, направленный на проверку корректности работы минимальных изолированных единиц кода (юнитов), таких как функции, методы или классы.

Основные принципы:

  • Изоляция: Тест проверяет только логику самого юнита. Все внешние зависимости (база данных, файловая система, другие модули) заменяются заглушками (stubs) или имитаторами (mocks).
  • Скорость: Unit-тесты должны выполняться очень быстро (миллисекунды), что позволяет запускать их тысячи раз в день.
  • Детерминированность: Результат теста (успех/провал) должен зависеть только от тестируемого кода, а не от внешних факторов.

Пример unit-теста для функции валидации email (на Python с использованием pytest и unittest.mock):

import re
from unittest.mock import patch

def is_valid_email(email):
    """Проверяет валидность формата email."""
    pattern = r'^[w.-]+@[w.-]+.w+$'
    return re.match(pattern, email) is not None

# Сам тест
def test_is_valid_email():
    # Позитивные кейсы
    assert is_valid_email("user@example.com") == True
    assert is_valid_email("first.last@company.co.uk") == True

    # Негативные кейсы (граничные условия)
    assert is_valid_email("invalid-email") == False
    assert is_valid_email("user@.com") == False
    assert is_valid_email("@example.com") == False
    assert is_valid_email("") == False  # Пустая строка

Практическая польза для QA: Модульные тесты, написанные разработчиками, создают "безопасную сетку". Это позволяет QA-инженерам быть уверенными, что базовые компоненты работают, и сосредоточиться на интеграционном, системном и приемочном тестировании.