[ad_1] Show phpunit menegaskan melanjutkan public function testDemo() { $failures = []; try { $this->assertTrue(false); } catch(PHPUnit_Framework_ExpectationFailedException $e) { $failures[] = $e->getMessage(); } try { $this->assertTrue(false); } catch(PHPUnit_Framework_ExpectationFailedException $e) { $failures[] = $e->getMessage(); } if(!empty($failures)) { throw new PHPUnit_Framework_ExpectationFailedException ( count($failures)." assertions failed:\n\t".implode("\n\t", $failures) ); } } [ad_2] Tolong bagikan
Menguji pengecualian di PHPUnit cukup mudah, dan Anda bisa sespesifik yang Anda butuhkan dengan menguji detail pengecualian yang dilemparkan Tetapi bagaimana jika Anda perlu menguji bahwa pengecualian tidak terjadi? Masalah PengecualianAda banyak pendukung kode bersih yang akan memberi tahu Anda bahwa menguji pengecualian yang tidak dilemparkan adalah tanda bahwa kode Anda melakukan sesuatu yang salah, dan bahwa kode tersebut harus difaktorkan ulang sehingga pengujian untuk yang negatif tidak diperlukan. Salah satu argumen utama yang menentang penggunaan pengecualian untuk mengontrol aliran aplikasi adalah bahwa mereka secara efektif menjadi tidak lebih dari pernyataan Itu tidak berarti kita harus menghindari penggunaan pengecualian sama sekali dalam upaya kita untuk menulis kode yang bersih, tetapi mungkin kita dapat menulis kode sedemikian rupa sehingga kita tidak akan terjebak dengan masalah pengujian ini sama sekali. Namun terkadang saat menulis tes, kami tidak selalu memiliki kemewahan untuk mengubah kode yang ada, jadi kami mungkin tidak punya pilihan selain mencoba dan menguji pengecualian yang tidak dilemparkan Penggunaan Pengecualian yang ValidJadi apa kasus penggunaan yang valid yang masih perlu kita uji?
Menguji NegatifCara mengujinya cukup sederhana public function testTheThing { // set up test-specific stuff here try { $classInstance->methodUnderTest(); $this->assertTrue(true); } catch (\Exception $exception) { $this->fail("Exception thrown testing thing"); } } Jika pengecualian dilemparkan, pengujian PHPUnit Anda gagal, yang pada akhirnya memperingatkan Anda bahwa beberapa logika metode Anda mengalami kegagalan. Anda mungkin bertanya-tanya mengapa ada kebutuhan untuk ________3______ tambahan di sini. Saya menggunakan ini untuk memastikan bahwa ketika tes lulus, setidaknya masih ada satu pernyataan yang valid di dalamnya, karena PHPUnit dapat menampilkan peringatan "tes berisiko" di konsol jika tes tidak mengandung pernyataan tergantung pada konfigurasi pengujian Anda Kandang dinosaurus terlihat bagus. Hanya ada satu masalah kecil. orang terus secara tidak sengaja menempatkan dinosaurus pemakan sayuran yang baik dan lembut ke dalam kandang yang sama dengan karnivora pemakan daging. Hasilnya adalah. dengan baik. mahal, dan ada banyak pembersihan juga Kita perlu mencegah pemakan daging dan pemakan sayuran bercampur di dalam kandang yang sama. Dengan kata lain, jika seseorang mencoba melakukan ini, kita perlu memberikan pengecualian Ini opsional, tetapi mari buat kelas pengecualian khusus untuk ini. baris 1 - 2namespace AppBundle\Exception;. baris 4class NotABuffetException extends \Exception{protected $message = 'Tolong jangan mencampur dinosaurus karnivora dan non-karnivora. Ini akan menjadi pembantaian. ';} Memastikan bahwa pengecualian ini dilakukan pada waktu yang tepat sangat penting untuk bisnis. Jadi mari kita menulis tes. Di dalam metodenya, ciptakan situasi yang menakutkan ini. baris 1 - 9class EnclosureTest memperluas TestCase{. baris 12 - 28public function testItDoesNotAllowCarnivorousDinosToMixWithHerbivores(){$enclosure = new Enclosure();$enclosure->addDinosaur(new Dinosaur());. baris 34 - 36$enclosure->addDinosaur(Dinosaurus baru('Velociraptor', benar));}} Pada titik ini, pengecualian harus dilemparkan. Jadi. bagaimana kita bisa mengujinya? . dengan baik. baris 1 - 9class EnclosureTest memperluas TestCase{. baris 12 - 28public function testItDoesNotAllowCarnivorousDinosToMixWithHerbivores(){. baris 31 - 34$this->expectException(NotABuffetException. kelas);. baris 36 - 37}} Jika kita telah melakukan pekerjaan kita dengan benar, ini akan gagal. Coba tes Ya. Gagal menyatakan bahwa pengecualian tipe Luar biasa. Mari kita buang pengecualian itu. Di dalam baris 1 - 13class Enclosure{. baris 16 - 40fungsi pribadi canAddDinosaur(Dinosaurus $dinosaur). bool{. baris 43 - 44}} Inilah beberapa logika sederhana. baris 1 - 13class Enclosure{. baris 16 - 40fungsi pribadi canAddDinosaur(Dinosaurus $dinosaur). bool{jumlah pengembalian($ini->dinosaurus) === 0. $this->dinosaurs->first()->Carnivorous() === $dinosaurs->is Carnivorous();}} Kembali ke baris 1 - 4class NotABuffetException meluas \Exception{. baris 7} Sekarang buang pengecualian itu baris 1 - 13class Enclosure{. baris 16 - 31 fungsi publik add Dinosaur(Dinosaur $dinosaur){if (. $this->canAddDinosaur($dinosaur)) {throw new NotABuffetException();}. baris 37 - 38}. baris 40 - 45} Periksa tes Merayu. Kami mengerti Ada satu cara lain untuk menguji pengecualian. Ini benar-benar sama, tetapi terlihat lebih mewah. Salin metode pengujian dan ganti namanya sehingga kami dapat menguji kondisi sebaliknya. baris 1 - 9class EnclosureTest memperluas TestCase{. baris 12 - 42public function testItDoesNotAllowToAddNonCarnivorousDinosaurusToCarnivorousEnclosure(){. baris 45 - 48}} Tambahkan Velociraptor terlebih dahulu lalu hapus Tip Sebenarnya, anotasi Cobalah baris 1 - 9class EnclosureTest memperluas TestCase{. baris 12 - 39public function testItDoesNotAllowToAddNonCarnivorousDinosaurusToCarnivorousEnclosure(){$enclosure = new Enclosure();$enclosure->addDinosaurus(new Dinosaur('Velociraptor', true));$enclosure->addDinosaur(new Dinosaur());}} Ya. Satu lagi tes lulus Saya ingin membahas satu contoh lagi selanjutnya. dan juga menambahkan beberapa keamanan ke lampiran. Tamu-tamu kita sudah cukup diteror Bagaimana cara menegaskan pengecualian di JUnit?Saat menggunakan JUnit 4, kita cukup menggunakan atribut yang diharapkan dari anotasi @Test untuk menyatakan bahwa kita mengharapkan pengecualian untuk dilemparkan di mana saja dalam metode pengujian yang dianotasi. In this example, we've declared that we're expecting our test code to result in a NullPointerException.
Bagaimana cara menjalankan tes PHPUnit tunggal?Cara Menjalankan Pengujian di PHPUnit. Anda dapat menjalankan semua tes dalam direktori menggunakan biner PHPUnit yang terinstal di folder vendor Anda. Anda juga dapat menjalankan pengujian tunggal dengan menyediakan jalur ke file pengujian . Anda menggunakan flag --verbose untuk mendapatkan informasi lebih lanjut tentang status pengujian.
Apa tujuan dari PHPUnit?PHPUnit menyediakan kerangka kerja sederhana untuk membuat rangkaian pengujian guna mengotomatiskan pengujian fungsi dan kelas . PHPUnit terinspirasi oleh JUnit yang dibuat oleh Kent Beck dan Erich Gamma sebagai alat untuk Pemrograman eXtreme.
Apa yang ditegaskan di PHPUnit?PHPUnit assertSame() Fungsi
. Penegasan ini akan mengembalikan nilai benar jika nilai yang diharapkan sama dengan nilai sebenarnya jika tidak mengembalikan nilai salah. used to assert whether the actually obtained value is the same as the expected value or not. This assertion will return true in the case if the expected value is the same as the actual value else returns false. |