Entropy adalah perpustakaan yang menyediakan alat untuk bekerja dengan pengujian acak di PHPUnit serta untuk sistem pengujian yang menggunakan fungsi acak PHP seperti rand
dan shuffle
.
Terkadang pengujian unit memerlukan perubahan pada status global, atau mencakup fungsionalitas yang mengubah status tersebut. Meskipun hal ini bukanlah situasi yang ideal, hal ini sering kali dapat mengakibatkan terciptanya ketergantungan yang tidak disengaja pada pengujian lain.
Mengaktifkan fungsi pengacakan pengujian Entropy akan mengacak urutan pengujian Anda, membantu menyoroti ketergantungan ini.
Pengocokan pengujian Entropy juga menghindari perubahan urutan pengujian menggunakan fungsionalitas @depends
dari PHPUnit; pekerjaan di masa depan akan memastikan bahwa pengacakan masih dapat terjadi untuk pengujian ini bila diperlukan.
Kadang-kadang Anda dapat menemukan diri Anda dalam situasi di mana kisaran masukan untuk suatu fungsi sangat besar sehingga mengambil seluruh masukan tersebut akan membuat penggunaan sumber daya Anda lebih efisien. Namun apa yang terjadi jika penampang tersebut memiliki lubang sehingga pengujian Anda mungkin gagal?
Salah satu cara untuk mengatasi hal ini adalah dengan menggunakan input acak, yaitu input yang dihasilkan sedemikian rupa untuk mendapatkan penampang rentang secara acak. Dengan kata lain, menggunakan rand
atau pendekatan non-deterministik lainnya.
Perpanjangan dari ini, pengujian berbasis properti adalah praktik menerapkan masukan acak ke aplikasi atau fungsi Anda, dan mengamati bahwa keluaran mematuhi aturan tertentu atau memiliki properti tertentu yang relatif terhadap masukan, bukan pengujian kesetaraan yang tepat terhadap hasil yang diketahui. mengatur.
Dengan mengelola seed acak untuk pengujian Anda, Entropy tidak hanya memungkinkan penggunaan pendekatan ini, namun juga membuatnya dapat diulang, baik dengan menerima seed tetap atau memulihkannya dari proses terakhir yang gagal hingga rangkaian pengujian Anda lulus.
Anda dapat menambahkan perpustakaan ini ke proyek Anda menggunakan Komposer:
$ composer require datto/phpunit-entropy
Setelah dikonfigurasi, Anda dapat menjalankan rangkaian pengujian seperti biasa; pendengar akan menjaga dirinya sendiri. Jika terjadi kesalahan atau kegagalan pengujian, seed yang digunakan akan disimpan dalam file sementara, sehingga pada proses berikutnya, seed tersebut akan digunakan kembali, bukan seed baru yang dihasilkan.
Benih untuk penghasil nomor acak disediakan hingga empat lokasi, disajikan di sini dalam urutan prioritas.
Jika disetel, variabel lingkungan SEED
akan digunakan untuk mengesampingkan pengaturan lainnya. Ini dapat diatur melalui export
, tetapi penggunaan yang disarankan adalah mengaturnya hanya untuk proses saat ini:
SEED=123456 phpunit -c phpunit.xml tests
Benih dapat diperbaiki berdasarkan konfigurasi; lihat bagian Konfigurasi di bawah.
Jika uji coba gagal, benih yang digunakan disimpan dalam file sementara. Ini kemudian dimuat pada pengujian berikutnya, dan akan bertahan hingga rangkaian berhasil lagi.
Jika tidak ada seed yang disetel melalui metode di atas, metode terakhir adalah menggunakan fungsi rand
PHP.
Setelah diinstal melalui composer, mengonfigurasi testlister hanya tinggal mengubah file konfigurasi PHPUnit Anda (seringkali phpunit.xml
):
< phpunit xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : noNamespaceSchemaLocation = " http://schema.phpunit.de/4.1/phpunit.xsd "
backupGlobals = " false "
colors = " true "
bootstrap = " bootstrap.php "
>
< listeners >
< listener class = " DattoPHPUnitEntropyListener " >
< arguments >
< array >
< element key = " seeding " >
< array >
< element key = " enabled " >
< boolean >true</ boolean >
</ element >
< element key = " seed " >
< integer >1234567</ integer >
</ element >
< element key = " file " >
< string >/tmp/phpentropy-seed</ string >
</ element >
</ array >
</ element >
< element key = " shuffle " >
< boolean >true</ boolean >
</ element >
</ array >
</ arguments >
</ listener >
</ listeners >
</ phpunit >
Jika disetel ke true, pembuat nomor acak akan diunggulkan oleh pendengar.
Jika Anda mengatur seed melalui argumen ini, hanya nilai ini yang akan digunakan untuk melakukan seed pada generator nomor acak. Lihat bagian prioritas benih di bawah.
Jika disetel, file ini akan digunakan untuk menyimpan benih acak terakhir yang gagal; defaultnya adalah [TMPDIR LOCATION]/phpunit-entropy-seed
.
Jika disetel ke true, urutan eksekusi pengujian unit akan diacak (kecuali untuk rangkaian yang menggunakan @depends
). Hal ini berguna dalam menentukan dan mengidentifikasi ketergantungan antar pengujian.
Christopher Hoult <[email protected]>