mata teras
- PHPUnit menukarkan pengendalian ralat asli PHP ke dalam pengecualian, yang mungkin mengubah aliran pelaksanaan kod semasa ujian. Ini boleh menyebabkan masalah apabila menguji kod menggunakan
- fungsi.
trigger_error()
PHPUnit menukarkan kesilapan kepada pengecualian, yang menyebabkan kod itu berkelakuan berbeza dalam pembangunan dan ujian daripada dalam persekitaran pengeluaran. Ini kerana proses pelaksanaan berubah apabila ralat ditemui. - untuk menguji secara tepat kod menggunakan
- , anda boleh menggunakan pengendali ralat tersuai untuk menangkap maklumat ralat untuk analisis kemudian menggunakan pernyataan. Ini membolehkan kod untuk meneruskan pelaksanaan sementara masih membenarkan memeriksa keadaan ralat yang dibangkitkan.
trigger_error()
Tingkah laku lalai unit adalah penting untuk ujian yang tepat. Sekiranya logik pasca pemicu, menambah fungsi PHPUnit dapat memudahkan ujian yang tepat sebagai dekat dengan persekitaran pengeluaran yang mungkin.
. Sementara itu, anda menulis ujian unit untuk kod tersebut menggunakan phpUnit. Jika anda merujuk kepada Manual PHPUNIT, terdapat seksyen yang didedikasikan untuk cara menguji keadaan ralat. Ia menerangkan bagaimana PHPUnit melaksanakan pengendali kesilapannya sendiri yang menukarkan kesilapan, amaran, dan pemberitahuan ke dalam pengecualian, dan menangkap pengecualian ini adalah bagaimana anda harus mengendalikan ujian ralat tersebut. Walau bagaimanapun, bergantung kepada penampilan kod anda, anda mungkin mempunyai masalah dengan pendekatan ini dengan PHPUNIT. Artikel ini akan menerangkan secara terperinci apa masalah ini, bagaimana ia mempengaruhi keupayaan anda untuk menguji kod anda, dan bagaimana menyelesaikannya. trigger_error()
Apakah masalahnya?
kesilapan dan pengecualian berkelakuan dengan cara yang berbeza. Khususnya, yang berkaitan dengan artikel ini, jika pemalar tahap ralat yang diluluskan kepadanya tidak menunjukkan ralat maut, pelaksanaan kod boleh diteruskan dengan segera selepas. Apabila pengecualian dilemparkan, pelaksanaan akan diteruskan pada permulaan blok trigger_error()
yang sepadan dengan kelas pengecualian itu, yang mungkin atau tidak mungkin berlaku sebaik sahaja titik di mana pengecualian dilemparkan. Mari kita lihat beberapa contoh tingkah laku ini. Pertama sekali, ia adalah kesilapan. catch
<?php error_reporting(E_ALL | E_STRICT); echo "Before warning\n"; trigger_error("Danger Will Robinson!", E_USER_WARNING); echo "After warning\n"; ?>Jika anda menjalankan kod di atas, anda akan mendapat output berikut:
<code>Before warning PHP Warning: Danger Will Robinson! in /home/matt/error_handler.php on line 4 After warning</code>dari ini kita dapat melihat bahawa pernyataan
selepas trigger_error()
dilaksanakan. Sekarang, pengecualian. echo
<?php try { echo "Before exception\n"; throw new Exception("Danger Will Robinson!"); echo "After exception\n"; } catch (Exception $e) { echo "In catch block\n"; } ?>output:
<code>Before exception In catch block</code>Berbeza dengan contoh ralat, kod selepas pengecualian dilemparkan tidak dilaksanakan. Kerana PHPUnit menukarkan ralat kepada pengecualian, ralat bertindak sama seperti pengecualian dalam ujian unit. Semasa ujian, sebarang kod yang dilaksanakan selepas ralat dicetuskan tidak akan dilaksanakan. Beri contoh lain:
<?php function foo($param) { if (is_string($param)) { trigger_error(__FUNCTION__ . " no longer supports strings, pass an array", E_USER_NOTICE); } // do useful stuff with $param ... } ?>Dengan penukaran kesilapan-ke-pengecualian, adalah mustahil untuk menguji sama ada
dikendalikan dengan berguna kerana apabila ralat ditukar kepada pengecualian, kod itu tidak akan dilaksanakan. $param
Kesan sampingan tingkah laku phpunit
Penukaran kesilapan-ke-pengecualian ini akan menyebabkan kod itu berkelakuan berbeza dalam pembangunan dan ujian daripada dalam persekitaran pengeluaran. Berikut adalah contoh:
<?php error_reporting(E_ALL | E_STRICT); echo "Before warning\n"; trigger_error("Danger Will Robinson!", E_USER_WARNING); echo "After warning\n"; ?>
output:
<code>Before warning PHP Warning: Danger Will Robinson! in /home/matt/error_handler.php on line 4 After warning</code>
Panggilan pertama var_dump()
(pada masa ini, pengendali ralat tersuai yang menukarkan ralat kepada pengecualian berkuatkuasa) output NULL. Panggilan kedua var_dump()
(di mana pengendali ralat lalai PHP berkuatkuasa) mengeluarkan maklumat mengenai ralat yang dicetuskan. Ambil perhatian bahawa ini bukan kerana null output panggilan pertama disebabkan oleh penggunaan pengendali ralat tersuai, tetapi kerana pengendali ralat melemparkan pengecualian. Jika pengendali ralat yang ditunjukkan dalam contoh ini tidak melakukan ini, output panggilan var_dump()
pertama akan sama dengan yang kedua. var_dump()
Penyelesaian
Kami memerlukan penyelesaian yang membolehkan terus melaksanakan kod yang diuji sementara masih membenarkan kami memeriksa sama ada keadaan ralat dibangkitkan. Seperti yang ditunjukkan dalam contoh di atas, membenarkan pelaksanaan kod untuk meneruskan boleh dilakukan dengan menggunakan pengendali ralat tersuai yang tidak menukar kesilapan kepada pengecualian. Apa yang perlu dilakukan oleh pengendali ralat ini ialah menangkap mesej ralat supaya dapat dianalisis kemudian menggunakan pernyataan. Inilah yang kelihatan seperti:
<?php try { echo "Before exception\n"; throw new Exception("Danger Will Robinson!"); echo "After exception\n"; } catch (Exception $e) { echo "In catch block\n"; } ?>
(jalan sebelum setiap kaedah ujian) mengendalikan menubuhkan pengendali ralat, yang merupakan kaedah lain dalam kelas yang sama yang menyimpan maklumat mengenai setiap ralat dalam array. Kaedah lain (seperti setUp()
) kemudian digunakan oleh kaedah ujian (seperti assertError()
) untuk melakukan pernyataan pada mesej ralat ini dan output maklumat debug yang relevan, seperti apa ralat yang dicetuskan berbanding dengan ralat yang diharapkan. Jenis penegasan berguna lain termasuk penyongsangan logik (iaitu, pernyataan tidak mencetuskan ralat tertentu), kesilapan yang menyemak mesej sepadan dengan ungkapan biasa, atau bilangan kesilapan yang dicetuskan. testDoStuff()
Kesimpulan
Jika anda tidak peduli jika logik di sebalik ujian yang mencetuskan ralat masih dilaksanakan, tingkah laku lalai phpunit sangat sesuai untuk keperluan anda. Walau bagaimanapun, adalah penting untuk anda memahami maksud tingkah laku. Sekiranya anda mengambil berat tentang pelaksanaan logik tersebut, juga penting bahawa anda tahu bagaimana untuk melengkapkan keupayaan PHPUNIT untuk memudahkan ujian yang tepat mengenai kod anda sebagai dekat dengan persekitaran pengeluaran yang mungkin.
Gambar dari Fotolia
(berikut adalah FAQ, format dan ungkapan telah diselaraskan mengikut kandungan asal, dan beberapa isu telah digabungkan atau dipermudahkan)
Q1: Mengapa phpunit tidak menunjukkan sebarang kesilapan dalam konsol?
PHPUnit direka dengan cara yang membolehkan ujian kesilapan dan pengecualian yang berkesan. Jika anda tidak melihat sebarang kesilapan dalam konsol, PHPUnit mungkin menangkap mereka dan merawatnya sebagai ujian yang gagal. Untuk melihat butiran kesilapan ini, anda boleh menggunakan pilihan Q2: Bagaimana untuk menegaskan bahawa pengecualian dilemparkan dalam phpunit? PHPUnit menyediakan satu set pernyataan yang digunakan khusus untuk mengendalikan pengecualian. Yang paling biasa digunakan ialah arahan ini. Ini membolehkan anda menyembunyikan beberapa jenis kesilapan, atau kesilapan log dan bukannya memaparkannya.
Sama seperti Q2.
Q5: Bagaimana menulis ujian untuk phpunit?
Menulis ujian untuk phpunit melibatkan mewujudkan kelas kes ujian baru yang memanjangkan kelas phpunitframeworktestcase. Setiap ujian adalah kaedah awam dalam kelas ini, bermula dengan perkataan "ujian". Dalam setiap kaedah ujian, anda boleh menggunakan pernyataan PHPUNIT untuk memeriksa sama ada kod anda berjalan seperti yang diharapkan. Sebagai contoh, anda boleh menggunakan kaedah untuk memeriksa sama ada fungsi mengembalikan hasil yang diharapkan.
PHPUnit menyediakan satu set pernyataan yang khusus digunakan untuk mengendalikan kesilapan. Yang paling biasa digunakan ialah , yang boleh anda gunakan untuk menentukan jenis ralat yang anda harapkan untuk mencetuskan. Jika ralat yang ditentukan dicetuskan semasa ujian, ujian berlalu. Jika tidak, ujian akan gagal. Ini membolehkan anda menulis ujian yang secara khusus memeriksa pengendalian keadaan ralat yang betul.
PHPUnit menyediakan beberapa pilihan untuk ujian debugging. Pilihan menyediakan output yang lebih terperinci, termasuk sebarang kesilapan atau pengecualian yang ditangkap semasa ujian. Pilihan dan PHPUnit menyediakan beberapa cara untuk menguji keadaan ralat. Kaedah Q9: Bagaimana menangani amaran di phpunit? PHPUNIT menyediakan satu set pernyataan yang khusus digunakan untuk mengendalikan amaran. Yang paling biasa digunakan ialah Q10: Bagaimana menggunakan penyedia data dalam phpunit? Pembekal data adalah ciri kuat PHPUnit yang membolehkan anda menjalankan ujian beberapa kali dengan dataset yang berbeza. Untuk menggunakan pembekal data, anda boleh membuat kaedah yang mengembalikan pelbagai tatasusunan. Setiap array dalaman adalah satu set parameter untuk ujian. Anda kemudian mengulas kaedah ujian anda menggunakan --debug
semasa menjalankan ujian. Ini akan memberikan output yang lebih terperinci, termasuk sebarang kesilapan atau pengecualian yang ditangkap semasa ujian. expectException()
, yang boleh anda gunakan untuk menentukan jenis pengecualian yang anda harapkan untuk dibuang. Jika pengecualian yang ditentukan dibuang semasa ujian, ujian akan lulus. Jika tidak, ujian akan gagal. Ini membolehkan anda menulis ujian yang secara khusus memeriksa pengendalian keadaan ralat yang betul. Q3: Bagaimanakah pelaporan ralat berfungsi dalam PHP?
Ciri pelaporan ralat PHP membolehkan anda mengawal kesilapan yang dilaporkan dan bagaimana menangani mereka. Secara lalai, semua kesilapan dilaporkan dan dipaparkan. Walau bagaimanapun, anda boleh menukar tetapan ini menggunakan fungsi error_reporting()
display_errors
Q4: Bagaimana untuk menguji pengecualian di PHPUNIT? assertEquals()
Q6: Bagaimana menangani kesilapan dalam phpunit? expectError()
Q7: Bagaimana cara debug ujian dalam phpunit? --debug
boleh digunakan untuk menghentikan ujian berjalan apabila kesilapan beberapa jenis ditemui. Ini boleh menjadikannya lebih mudah untuk mengenal pasti dan menyelesaikan masalah. --stop-on-error
--stop-on-failure
--stop-on-risky
Q8: Bagaimana untuk menguji keadaan ralat di phpunit? expectError()
membolehkan anda menentukan jenis ralat yang anda harapkan untuk mencetuskan. Kaedah expectWarning()
membolehkan anda menentukan jenis amaran yang anda harapkan untuk mencetuskan. Jika ralat atau amaran yang ditentukan dicetuskan semasa ujian, ujian akan lulus. Jika tidak, ujian akan gagal. expectWarning()
, yang boleh anda gunakan untuk menentukan jenis amaran yang anda harapkan untuk mencetuskan. Sekiranya amaran yang ditentukan dicetuskan semasa ujian, ujian berlalu. Jika tidak, ujian akan gagal. Ini membolehkan anda menulis ujian yang secara khusus memeriksa pengendalian keadaan amaran yang betul. @dataProvider
diikuti dengan nama kaedah penyedia data anda. PHPUnit kemudian akan menjalankan ujian sekali untuk setiap set parameter dan lulus parameter ke kaedah ujian.
Atas ialah kandungan terperinci PHP Master | Ujian keadaan ralat dengan phpunit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

TosecurelyhandleAuthenticationandauthorizationInphp, ikuti: 1.alwayshashpasswordswithpassword_hash () andverifyUsingPassword_verify (), usePePreparedStatementStopreventsqlInjection, andStoreUserDatain $ _SessionAsLogin.2.implescureRoleRoleRoleRoleRole

Untuk mengendalikan muat naik fail dengan selamat di PHP, terasnya adalah untuk mengesahkan jenis fail, menamakan semula fail, dan menyekat kebenaran. 1. Gunakan finfo_file () untuk memeriksa jenis mime sebenar, dan hanya jenis tertentu seperti imej/jpeg dibenarkan; 2. Gunakan uniqid () untuk menghasilkan nama fail rawak dan simpannya dalam direktori akar bukan web; 3. Hadkan saiz fail melalui borang php.ini dan html, dan tetapkan kebenaran direktori ke 0755; 4. Gunakan Clamav untuk mengimbas malware untuk meningkatkan keselamatan. Langkah -langkah ini dengan berkesan menghalang kelemahan keselamatan dan memastikan bahawa proses muat naik fail adalah selamat dan boleh dipercayai.

Dalam PHP, perbezaan utama antara == dan == adalah ketat pemeriksaan jenis. == Penukaran jenis akan dilakukan sebelum perbandingan, contohnya, 5 == "5" pulangan benar, dan === meminta nilai dan jenis adalah sama sebelum benar akan dikembalikan, sebagai contoh, 5 === "5" mengembalikan palsu. Dalam senario penggunaan, === lebih selamat dan harus digunakan terlebih dahulu, dan == hanya digunakan apabila penukaran jenis diperlukan.

Kaedah menggunakan operasi matematik asas dalam PHP adalah seperti berikut: 1. Tanda tambahan menyokong bilangan bulat dan nombor terapung, dan juga boleh digunakan untuk pembolehubah. Nombor rentetan akan ditukar secara automatik tetapi tidak disyorkan kepada kebergantungan; 2. Tanda -tanda pengurangan - tanda, pembolehubah adalah sama, dan penukaran jenis juga terpakai; 3. Tanda -tanda pendaraban menggunakan tanda *, yang sesuai untuk nombor dan rentetan yang serupa; 4. Bahagian menggunakan / tanda, yang perlu mengelakkan pembahagian dengan sifar, dan perhatikan bahawa hasilnya mungkin nombor terapung; 5. Mengambil tanda modulus boleh digunakan untuk menilai angka ganjil dan bahkan, dan apabila memproses nombor negatif, tanda -tanda selebihnya selaras dengan dividen. Kunci untuk menggunakan pengendali ini dengan betul adalah untuk memastikan bahawa jenis data adalah jelas dan keadaan sempadan ditangani dengan baik.

Ya, PHP boleh berinteraksi dengan pangkalan data NoSQL seperti MongoDB dan Redis melalui sambungan atau perpustakaan tertentu. Pertama, gunakan pemacu MongoDBPHP (dipasang melalui PECL atau komposer) untuk membuat contoh pelanggan dan mengendalikan pangkalan data dan koleksi, penyisipan sokongan, pertanyaan, pengagregatan dan operasi lain; Kedua, gunakan perpustakaan predis atau lanjutan phpredis untuk menyambung ke REDIS, lakukan tetapan dan pengambilalihan nilai utama, dan mengesyorkan PHPREDI untuk senario berprestasi tinggi, sementara Predis mudah untuk penempatan pesat; Kedua-duanya sesuai untuk persekitaran pengeluaran dan didokumentasikan dengan baik.

Tostaycurrentwithphpdevelopmentsandbestpractices, followeyNewsssourcesLikePhp.netandphpweekly, engageWithCommunitiesonforumsandconference, keeptoolingupdatedandgraduallyAdoptNewFeatures, dan readribcoursourcourceSource

Phpbecamepopularforwebdevelopmentduetoitseaseoflearning, seamlessintegrationwithhtml, widespreadhostingsupport, andalargeecosystemincludingframeworkslikelaravelandcmsplatformsLikeWordPress.itexcelsinhandessubmissions

TosetTheRightTimeZoneinPhp, USEDATE_DEFAULT_TIMEZONE_SET () functionAtthestArtAfyourscriptwithavalididentifiersuchas'america/new_york'.1.usedate_default_timeSet ()
