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)

Masalah dan penyelesaian biasa untuk skop pembolehubah PHP termasuk: 1. Pembolehubah global tidak dapat diakses dalam fungsi, dan ia perlu diluluskan menggunakan kata kunci atau parameter global; 2. Pembolehubah statik diisytiharkan dengan statik, dan ia hanya dimulakan sekali dan nilai dikekalkan antara pelbagai panggilan; 3. Pembolehubah hyperglobal seperti $ _get dan $ _post boleh digunakan secara langsung dalam mana -mana skop, tetapi anda perlu memberi perhatian kepada penapisan yang selamat; 4. Fungsi Anonymous perlu memperkenalkan pembolehubah skop induk melalui kata kunci penggunaan, dan apabila mengubah suai pembolehubah luaran, anda perlu lulus rujukan. Menguasai peraturan ini boleh membantu mengelakkan kesilapan dan meningkatkan kestabilan kod.

Untuk mengendalikan muat naik fail PHP dengan selamat, anda perlu mengesahkan sumber dan jenis, mengawal nama fail dan laluan, menetapkan sekatan pelayan, dan memproses fail media dua kali. 1. Sahkan sumber muat naik untuk mengelakkan CSRF melalui token dan mengesan jenis mime sebenar melalui finfo_file menggunakan kawalan putih; 2. Namakan semula fail ke rentetan rawak dan tentukan pelanjutan untuk menyimpannya dalam direktori bukan web mengikut jenis pengesanan; 3. Konfigurasi PHP mengehadkan saiz muat naik dan direktori sementara Nginx/Apache melarang akses ke direktori muat naik; 4. Perpustakaan GD menyambung semula gambar -gambar untuk membersihkan data yang berpotensi.

Terdapat tiga kaedah umum untuk kod komen PHP: 1. Use // atau # untuk menyekat satu baris kod, dan disyorkan untuk menggunakan //; 2. Gunakan /.../ untuk membungkus blok kod dengan pelbagai baris, yang tidak boleh bersarang tetapi boleh diseberang; 3. Komen -komen kemahiran gabungan seperti menggunakan / jika () {} / untuk mengawal blok logik, atau untuk meningkatkan kecekapan dengan kunci pintasan editor, anda harus memberi perhatian kepada simbol penutupan dan mengelakkan bersarang apabila menggunakannya.

Ageneratorinphpisamemory-efficientwaytoiterateOverlargedatasetsbyieldingvaluesonateatimeNsteadofreturningthemallatonce.1.GeneratorSuseTheyEldeyWorderWorderToProducevaluuesondemand,

Kunci untuk menulis komen PHP adalah untuk menjelaskan tujuan dan spesifikasi. Komen harus menjelaskan "mengapa" dan bukannya "apa yang dilakukan", mengelakkan redundansi atau terlalu kesederhanaan. 1. Gunakan format bersatu, seperti docblock (/*/) untuk deskripsi kelas dan kaedah untuk meningkatkan keserasian dan keserasian alat; 2. Menekankan sebab -sebab di sebalik logik, seperti mengapa JS melompat perlu dikeluarkan secara manual; 3. Tambahkan gambaran keseluruhan gambaran sebelum kod kompleks, terangkan proses dalam langkah -langkah, dan membantu memahami idea keseluruhan; 4. Gunakan Todo dan Fixme secara rasional untuk menandakan item dan masalah untuk memudahkan penjejakan dan kerjasama berikutnya. Anotasi yang baik dapat mengurangkan kos komunikasi dan meningkatkan kecekapan penyelenggaraan kod.

Dalam PHP, anda boleh menggunakan kurungan persegi atau pendakap keriting untuk mendapatkan aksara indeks spesifik rentetan, tetapi kurungan persegi disyorkan; Indeks bermula dari 0, dan akses di luar julat mengembalikan nilai null dan tidak dapat diberikan nilai; MB_SUBSTR dikehendaki mengendalikan watak multi-bait. Sebagai contoh: $ str = "hello"; echo $ str [0]; output h; dan watak -watak Cina seperti MB_SUBSTR ($ str, 1,1) perlu mendapatkan hasil yang betul; Dalam aplikasi sebenar, panjang rentetan perlu diperiksa sebelum gelung, rentetan dinamik perlu disahkan untuk kesahihan, dan projek berbilang bahasa mengesyorkan menggunakan fungsi keselamatan multi-bait secara seragam.

Toinstallphpquickly, usexampponwindowsorhomeBrewonmacos.1.onwindows, downloadandInstallxampp, selectcomponents, startapache, andplaceFilesinhtdocs.2.alternative, secara manualstallphpfromphp.netandsheBerver.3

Tolearnphpeffectively, startbysettingupalocalverenvironmentusingToolsLikexamppandaCodeDitorLikevscode.1) InstallXamppforapa Che, MySql, danPhp.2) UseAcodeeditorForsyntaxSupport.3) testyoursetupwithasimplephpfile.next, learnphpbasicsincludingvariables, ech
