Pustaka pengujian integrasi dalam PHP untuk database dan pengujian terkait infrastruktur umum lainnya.
Ini dikembangkan sebagai serangkaian ekstensi untuk PHPUnit yang menghubungkan berbagai acara dan menjalankan perlengkapan Anda.
Saat ini Anda dapat menjalankan perlengkapan khusus pada kait PHPUnit berikut:
Sebelum Tes Pertama
Sebelum Tes
Tes Setelahnya
Setelah Tes Terakhir
WIP: Perlengkapan pengujian khusus AMQP dengan WithBeforeTestFixtureName dan WithAfterTestFixtureName
Unit PHP
Melalui komposer
composer require --dev hrodic/php-integration-testing
Pada file XML konfigurasi PHPUnit Anda harus menentukan ekstensi beserta konfigurasinya.
Anda dapat menentukan nama file konfigurasi yang akan Anda gunakan. Defaultnya adalah .integration-testing.json
<extensions> <extension class="IntegrationTestingPHPUnitRunnerExtensionHandler"> <arguments> <string>.integration-testing.json</string> </arguments> </extension> </extensions>
Anda juga memeriksa contoh phpunit-integration.xml.dist
Jika Anda memerlukan bantuan dengan ekstensi PHPUnit, silakan merujuk ke Dokumentasi Resmi
Jika Anda perlu menguji integrasi MySQL atau MariaDB, gunakan ekstensi driver PDO.
Ini memerlukan parameter konfigurasi yang dapat ditemukan di file konfigurasi json.
Parameter yang paling penting adalah DSN, nama pengguna dan kata sandi database Anda + beberapa definisi jalur perlengkapan.
Contoh:
"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" } } },
Anda juga dapat mencoba perlengkapan dan pengoperasian AMQP (diuji pada RabbitMQ).
Konfigurasikan konektivitas Anda dan operasi hook menggunakan file konfigurasi.
Catatan:
Definisi kait bersifat opsional, jadi konfigurasikan saja yang Anda perlukan.
Anda hanya dapat memublikasikan pesan di beforeFirstTest
dan beforeTest
.
Anda dapat membersihkan antrian di keempat hook.
ekstensi file badan pesan untuk mempublikasikan default ke json
gunakan routing_key
jika pertukaran Anda dikonfigurasi sebagai direct
. Anda dapat mendefinisikannya sebagai string kosong jika 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": [] } } }
Perlengkapan PDO hanyalah file SQL.
Semua perlengkapan yang terletak di kategori hook tertentu akan dieksekusi secara berurutan dan di dalam transaksi.
Cara Anda membuat SQL dan integritas database di setiap tahap terserah Anda. Perpustakaan tidak memaksa Anda untuk mengikuti konvensi apa pun meskipun merupakan hal yang umum untuk mengatur perlengkapan di awal dan membersihkan kekacauan Anda setelah setiap pengujian.
Anda dapat membuat, menyisipkan, menghapus, atau apa pun yang Anda konfigurasikan untuk dilakukan pengguna Anda. Ingat, database pengujian Anda harus diisolasi dari database nyata!
Keempat jenis kait perlengkapan dapat ditempatkan di direktori yang Anda inginkan.
Untuk hook BeforeTest dan AfterTest, yang terjadi di setiap pengujian tertentu, Anda juga dapat menyediakan perlengkapan spesifik untuk dieksekusi tepat setelah perlengkapan umum Sebelum dan Setelah dengan mengimplementasikan antarmuka WithBeforeTestFixtureName dan/atau 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!) } }
Ekstensi akan memeriksa apakah metode telah ditentukan, dan menggunakannya untuk menemukan subdirektori di dalam direktori utama BEFORE_TEST_PDO_FIXTURES_PATH dan AFTER_TEST_PDO_FIXTURES_PATH.
Jika Anda melihat folder tes/perlengkapan, Anda akan melihat contoh bagaimana Anda dapat mengatur perlengkapan Anda. Anda dapat memiliki banyak file SQL dan ekstensi akan membaca dan menjalankannya secara berurutan.
├── 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
Pengujian integrasi memerlukan beberapa infrastruktur.
Pustaka ini mengasumsikan (Anda dapat memeriksa file docker-compose.yml untuk mendapatkan inspirasi) bahwa Anda sudah memiliki database yang dapat diakses atau infrastruktur lain dan database telah dibuat.