ไลบรารีการทดสอบการรวมใน PHP สำหรับฐานข้อมูลและการทดสอบที่เกี่ยวข้องกับโครงสร้างพื้นฐานทั่วไปอื่นๆ
ได้รับการพัฒนาเป็นชุดส่วนขยายสำหรับ PHPUnit ที่เชื่อมโยงกับเหตุการณ์ต่างๆ และดำเนินการติดตั้งของคุณ
ขณะนี้คุณสามารถรันฟิกซ์เจอร์แบบกำหนดเองบน PHPUnit hooks ต่อไปนี้:
ก่อนการทดสอบครั้งแรก
ก่อนการทดสอบ
หลังการทดสอบ
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) ได้
กำหนดค่าการเชื่อมต่อและการทำงานของ hook โดยใช้ไฟล์การกำหนดค่า
หมายเหตุ:
คำจำกัดความของ Hook เป็นทางเลือก ดังนั้นเพียงกำหนดค่าสิ่งที่คุณต้องการ
คุณสามารถเผยแพร่ข้อความได้เฉพาะใน beforeFirstTest
และ beforeTest
คุณสามารถล้างคิวใน hook ทั้งสี่ได้
นามสกุลไฟล์ของเนื้อหาข้อความเพื่อเผยแพร่ค่าเริ่มต้นเป็น 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 เพื่อหาแรงบันดาลใจ) ว่าคุณมีฐานข้อมูลที่สามารถเข้าถึงได้หรือโครงสร้างพื้นฐานอื่นอยู่แล้วและฐานข้อมูลถูกสร้างขึ้น