Приложение уже сохраняет книги, проверяет ввод и показывает список. Но после перестройки легко сломать правило разбора года или подписи, не заметив этого сразу. Автоматический тест запускает код с известными данными и сравнивает результат с ожидаемым.
Ставим PHPUnit для разработки
Добавьте PHPUnit в зависимости только для разработки:
composer require --dev phpunit/phpunit
Composer выберет версию, совместимую с указанной версией PHP проекта. Перед обновлением сверяйтесь с таблицей требований PHPUnit. Тестовая библиотека не нужна на рабочем сервере приложения.
Проверяем правило разбора года
Сохраните функцию parseYear() в src/functions.php и подключите этот файл в автозагрузке Composer или явно в тесте. Создайте tests/YearTest.php:
<?php
declare(strict_types=1);
require dirname(__DIR__) . '/src/functions.php';
final class YearTest extends \PHPUnit\Framework\TestCase
{
public function test_valid_year_is_returned_as_an_integer(): void
{
self::assertSame(1965, parseYear('1965'));
}
public function test_non_numeric_input_is_rejected(): void
{
$this->expectException(InvalidArgumentException::class);
parseYear('не год');
}
}
assertSame() проверяет и значение, и тип. Если функция вернёт строку '1965' вместо числа 1965, тест обнаружит отличие. expectException() говорит PHPUnit, что этот сценарий должен завершиться исключением.
Запускаем тесты
vendor/bin/phpunit tests
В Windows исполняемый файл обычно находится по пути vendor\bin\phpunit. Успешный запуск показывает, сколько тестов прошло. Если тест падает, сообщение содержит место ожидания и фактический результат.
Тестируйте поведение, а не строки кода
Тест не должен подтверждать, что внутри функции есть конкретный if. Проверьте смысл: корректный год принят, неправильный отклонён, подпись книги содержит нужные части. Тогда код можно переписать, сохранив проверку внешнего поведения.
Для SQLite можно добавить интеграционный тест: создать временную базу, сохранить книгу через репозиторий, прочитать её и сравнить результат. Временное хранилище изолирует тест от реального каталога.
Короткая команда через Composer
Добавьте скрипт в composer.json:
{
"scripts": {
"test": "phpunit tests"
}
}
Теперь composer test запускает тот же набор. Эту команду можно выполнять перед публикацией изменений и в автоматической сборке.
Сколько тестов нужно
Начните с правил, от которых зависит сохранность данных: валидация, переход статуса, повреждённый JSON, сохранение и чтение книги. Проверяйте ошибки и граничные значения. Важнее покрыть ключевые решения приложения, чем стремиться проверить каждую строку.
В финальной части подготовим каталог к запуску: отделим настройки от кода, настроим публичный корень и пройдём короткий список перед выкладкой.
Навигация по курсу
Часть 15 из 16.
← Часть 14: PDO и SQLite в PHP: база и подготовленные запросы · Часть 16: Публикуем PHP-приложение: настройки и чек-лист для продакшена →
0
13