مكتبة اختبار التكامل في PHP لقواعد البيانات وغيرها من الاختبارات الشائعة المتعلقة بالبنية التحتية.
لقد تم تطويره كمجموعة من الامتدادات لـ PHPUnit التي ترتبط بأحداث مختلفة وتنفذ تجهيزاتك.
يمكنك حاليًا تشغيل تركيبات مخصصة على خطافات PHPUnit التالية:
قبل الاختبار الأول
قبل الاختبار
بعد الاختبار
AfterLastTest
WIP: تركيبات اختبار محددة لـ 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.
إذا ألقيت نظرة على مجلد الاختبارات/التركيبات، فسوف ترى مثالاً حول كيفية تنظيم تركيباتك. يمكن أن يكون لديك ملفات 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 للحصول على الإلهام) أن لديك قاعدة بيانات يمكن الوصول إليها أو بنية تحتية أخرى موجودة بالفعل وتم إنشاء قاعدة البيانات.