Sejauh ini, kami hanya memiliki dua pengujian untuk Array dan fungsi bawaan sizeof(). Saat kita mulai menguji sejumlah besar fungsi array_*(), kita memerlukan pengujian untuk masing-masing fungsi tersebut. Kita bisa menulis masing-masing dari awal. Namun, pendekatan yang lebih baik adalah dengan menulis infrastruktur pengujian satu kali dan kemudian hanya menulis bagian yang berbeda dari setiap pengujian. PHPUnit adalah infrastruktur seperti itu.
Contoh 5 menunjukkan cara menulis ulang kedua pengujian pada Contoh 4 menggunakan PHPUnit.
Contoh 5.
Uji Array dan sizeof()dengan
PHPUnit
require_once 'PHPUnit2/Framework/TestCase.php';
kelas ArrayTest memperluas PHPUnit2_Framework_TestCase {
fungsi publik tesNewArrayIsEmpty( ) {
//Membuat perlengkapan array.
$perlengkapan = Array( );
// Tegaskan bahwa ukuran perlengkapan array adalah 0.
$ini->assertEquals(0, sizeof($fixture));
}
fungsi publik testArrayContainsAnElement() {
//Membuat perlengkapan array.
$fixture = Array( );
// Tambahkan anggota ke perlengkapan array.
$fixture[] = 'Elemen';
//Tegaskan bahwa ukuran perlengkapan array adalah 1.
$ini->assertEquals(1, sizeof($fixture));
}
}
?>
Contoh 5 memberitahu kita langkah-langkah dasar menggunakan PHPUnit untuk menulis tes adalah:
1. Kelas tes untuk kelas Kelas adalah ClassTest.
2. ClassTest umumnya mewarisi PHPUnit2_ Framework_TestCase.
3. Test adalah metode publik tanpa parameter dan namanya test*.
4. Dalam metode pengujian, fungsi pernyataan seperti menegaskanEquals() (lihat Tabel 6) digunakan untuk menyatakan apakah nilai sebenarnya cocok dengan nilai yang diharapkan.
Kerangka kerja seperti PHPUnit perlu menyelesaikan sejumlah masalah, beberapa di antaranya tampaknya saling bertentangan. Pengujian juga harus memenuhi ketentuan berikut:
Mudah dipelajari
Pengujian harus mudah dipelajari, jika tidak, pengembang tidak akan belajar
Mudah dikembangkan
Pengujian harus mudah dikembangkan, jika tidak, pengembang tidak akan mengembangkan
Mudah dibaca
Kode pengujian tidak boleh memiliki hubungan eksternal , sehingga tes itu sendiri tidak tersesat di tengah kekacauan.
Mudah dijalankan
Pengujian harus mudah dilaksanakan dan hasil pelaksanaannya harus dinyatakan dalam format yang jelas dan tidak ambigu.
TesEksekusi Cepat
harus dijalankan dengan cepat sehingga dapat dijalankan ribuan kali per hari.
Pengujianisolasi kode
tidak dapat memengaruhi satu sama lain, dan perubahan urutan pengujian tidak akan memengaruhi hasil.
Composable
Kita harus dapat menjalankan pengujian dalam kombinasi apa pun, yang merupakan akibat dari isolasi kode.
Ada dua konflik utama antara kendala-kendala ini:
Kemudahan Pembelajaran vs Kemudahan Pengembangan
Pengujian umumnya tidak memerlukan fleksibilitas penuh dalam pemrograman. Banyak alat pengujian menyediakan bahasa skrip pengujiannya sendiri. Bahasa-bahasa ini hanya memiliki serangkaian fitur minimum yang diperlukan untuk menulis tes. Karena tidak ada gangguan yang mengganggu konten pengujian Anda, tes tertulis mudah dibaca dan ditulis. Namun mempelajari alat rajut dan seperangkat alat baru masih merepotkan dan mudah membingungkan.
Isolasi Kode vs. Eksekusi Cepat
Jika Anda ingin hasil dari satu pengujian tidak memengaruhi pengujian lainnya, Anda perlu membuat topik lengkap untuk pengujian tersebut di awal setiap pengujian, lalu memulihkan status sebelum dijalankan. Namun, pengaturan status memerlukan waktu yang lama (misalnya, menghubungkan ke database dan menginisialisasi status yang diketahui dengan data nyata).
Solusi PHPUnit untuk masalah ini adalah dengan menggunakan PHP sebagai bahasa pengujian. Terkadang, PHP berfitur lengkap terlalu kuat untuk menulis pengujian yang singkat dan mudah, namun pemrogram yang kami gunakan sudah memiliki pengalaman penuh dengan PHP. Karena kita perlu meyakinkan penguji yang enggan, menurunkan hambatan dalam menulis tes awal ini sangatlah penting.