Библиотека интеграционного тестирования на PHP для баз данных и других тестов, связанных с общей инфраструктурой.
Он разработан как набор расширений для PHPUnit, который перехватывает различные события и выполняет ваши настройки.
В настоящее время вы можете запускать собственные фикстуры на следующих хуках PHPUnit:
Перед первым тестом
Перед тестом
Послетест
Афтерласттест
НЗП: специальные тестовые приспособления AMQP с WithBeforeTestFixtureName и WithAfterTestFixtureName.
PHPUnit
Через композитора
composer require --dev hrodic/php-integration-testing
В XML-файле конфигурации PHPUnit вы должны указать расширение вместе с его конфигурацией.
Вы можете указать имя файла конфигурации, который вы будете использовать. По умолчанию — .integration-testing.json.
<extensions> <extension class="IntegrationTestingPHPUnitRunnerExtensionHandler"> <arguments> <string>.integration-testing.json</string> </arguments> </extension> </extensions>
Вы также проверяете пример phpunit-integration.xml.dist.
Если вам нужна помощь с расширениями PHPUnit, обратитесь к официальной документации.
Если вам нужно протестировать интеграцию MySQL или MariaDB, используйте расширение драйвера PDO.
Для этого требуются параметры конфигурации, которые можно найти в файле конфигурации json.
Наиболее важными параметрами являются DSN, имя пользователя и пароль вашей базы данных + некоторые определения путей к приборам.
Пример:
"pdo": { "dsn": "mysql:host=localhost:3306;dbname=test;charset=utf8", "user": "test", "password": "test", "fixtures": { "beforeFirstTest": { "path": "tests/fixtures/before-first-test", "extension": "sql" }, "beforeTest": { "path": "tests/fixtures/before-test", "extension": "sql" }, "afterTest": { "path": "tests/fixtures/after-test" }, "afterLastTest": { "path": "tests/fixtures/after-last-test" } } },
Вы также можете опробовать приспособления и операции AMQP (протестировано на RabbitMQ).
Настройте подключение и операции перехвата с помощью файла конфигурации.
Примечания:
Определения хуков не являются обязательными, поэтому просто настройте те, которые вам нужны.
Публиковать сообщения можно только на beforeFirstTest
и beforeTest
.
Вы можете очистить очереди во всех четырех хуках.
расширение тела сообщения для публикации значений по умолчанию в json
используйте routing_key
, если ваш обмен настроен как direct
. Вы можете определить его как пустую строку, если fanout
"amqp": { "host": "localhost", "port": 5672, "user": "test", "password": "test", "vhost": "/", "fixtures": { "beforeFirstTest": { "purgeQueues": [ "before-first-test-queue" ], "publishMessages": [ { "exchange": "test-exchange", "queue": "before-first-test-queue", "routing_key": "before-first-test", "path": "tests/fixtures/before-first-test", "extension": "json" } ] }, "beforeTest": { "purgeQueues": [ "before-test-queue" ], "publishMessages": [ { "exchange": "test-exchange", "queue": "before-test-queue", "routing_key": "before-test", "path": "tests/fixtures/before-test" } ] }, "afterTest": { "purgeQueues": [ "before-test-queue" ] }, "afterLastTest": { "purgeQueues": [] } } }
Фикстура PDO — это просто файл SQL.
Все фикстуры, расположенные в определенной категории хуков, будут выполняться по порядку и внутри транзакции.
То, как вы создаете SQL и целостность базы данных на каждом этапе, зависит от вас. Библиотека не заставляет вас следовать каким-либо соглашениям, хотя обычно она настраивает приборы вначале и убирает беспорядок после каждого теста.
Вы можете создавать, вставлять, удалять или делать все, что вы настроите для своего пользователя. Помните, ваша тестовая база данных должна быть изолирована от любой реальной базы данных!
Все четыре типа фиксирующих устройств могут быть размещены в предпочитаемом вами каталоге.
Для перехватчиков BeforeTest и AfterTest, которые встречаются в каждом конкретном тесте, вы также можете предоставить определенные приспособления, которые будут выполняться сразу после общих приспособлений «До» и «После», реализовав интерфейсы WithBeforeTestFixtureName и/или WithAfterTestFixtureName.
final class YourIntegrationTest extends TestCase implements WithBeforeTestFixtureName, WithAfterTestFixtureName { private const FIXTURE_NAME = 'pdo-integration-test'; public static function getAfterTestFixtureName(): string { return self::FIXTURE_NAME; } public static function getBeforeTestFixtureName(): string { return self::FIXTURE_NAME; } public function testYourRepositoryHere(): void { // arrange // act // assert against real database (your fixtures are already there!) } }
Расширение проверит, определены ли методы, и использует их для поиска подкаталогов внутри основных каталогов BEFORE_TEST_PDO_FIXTURES_PATH и AFTER_TEST_PDO_FIXTURES_PATH.
Если вы заглянете в папкуtests/fixtures, вы увидите пример того, как вы можете организовать свои фикстуры. У вас может быть несколько файлов SQL, и расширение будет читать и выполнять их по порядку.
├── after-last-test # AFTER_LAST_TEST_PDO_FIXTURES_PATH, executed once, at the end │ └── 01.sql ├── after-test # AFTER_TEST_PDO_FIXTURES_PATH, executed after each test │ ├── 01.sql │ └── pdo-integration-test # executed after each test inside the class that defines this fixture name │ └── 01.sql ├── before-first-test # BEFORE_FIRST_TEST_PDO_FIXTURES_PATH, executed once, at the beginning │ └── 01.sql └── before-test # BEFORE_TEST_PDO_FIXTURES_PATH, executed before each test ├── 01.sql └── pdo-integration-test # executed before each test inside the class that defines this fixture name └── 01.sql
Интеграционное тестирование требует наличия некоторой инфраструктуры.
Эта библиотека предполагает (вы можете проверить файл docker-compose.yml для вдохновения), что у вас уже есть доступная база данных или другая инфраструктура, и база данных создана.