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

«Что такое модульное тестирование?» — вопрос из категории Тестирование, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Модульное тестирование (unit testing) — это практика написания автоматических тестов для проверки корректности работы минимальных изолированных единиц кода, таких как отдельные функции, методы или небольшие классы. Цель — убедиться, что каждый компонент работает согласно своей спецификации.

Основные принципы, которые я соблюдаю:

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

Пример модульного теста на PHP с использованием PHPUnit:

// Тестируемый класс
class Calculator {
    public function add(int $a, int $b): int {
        return $a + $b;
    }
}

// Тестовый класс
class CalculatorTest extends PHPUnitFrameworkTestCase {
    public function testAddReturnsCorrectSum(): void {
        $calculator = new Calculator();
        $result = $calculator->add(2, 3);
        $this->assertEquals(5, $result);
    }

    public function testAddWithNegativeNumbers(): void {
        $calculator = new Calculator();
        $result = $calculator->add(-5, 10);
        $this->assertEquals(5, $result);
    }
}

В моих проектах модульные тесты — это основа безопасности рефакторинга и раннего обнаружения регрессий. Я использую фреймворки PHPUnit или Pest.