Dalam artikel lepas, kami mula membincangkan teori ujian unit dalam WordPress. Secara khususnya, kami menyemak kerja kami pada tema dan pemalam ujian unit, kemudian beralih kepada membincangkan unit kod, cara ini memberi kesan kepada ujian kami dan kami menyemak ujian unit dalam dunia pembangunan perisian yang lebih besar.
Kami akan terus membincangkan teori ujian unit dalam WordPress, tetapi dari perspektif cara ia boleh membantu mengenal pasti isu, memacu seni bina, projek dokumen dan banyak lagi.
Imbau kembali kandungan siri ini sebelum ini, kaedah tradisional ujian unit adalah ini:
Ya, langkah pertama agak dogmatik. Mengapa membuang masa menjalankan sesuatu yang anda tahu akan gagal, bukan? Tetapi, anda faham maksudnya. Tetapi apabila anda mula menggunakan teknik khusus ini untuk pembangunan, anda akan mendapati bahawa anda membangunkan irama tertentu semasa menulis kod, dan itu adalah sebahagian daripada matlamat keseluruhan.
Tetapi itu hanya separuh daripadanya - ujian unit sebenarnya boleh membantu anda menangkap masalah pada awal pembangunan.
Untuk memahami perkara ini, sebaiknya semak semula idea tersebut.
Katakan anda sedang membangunkan ciri untuk projek berasaskan WordPress di mana anda akan membenarkan pengguna membuat akaun pengguna tanpa benar-benar melog masuk ke papan pemuka WordPress. Ini menganggap anda telah menyediakan templat halaman untuk mengendalikan pendaftaran, pengesahan yang diperlukan dan kod untuk menjana kata laluan dan e-mel.
Anda memuatkan halaman dalam penyemak imbas anda dan cuba mencipta beberapa pengguna - beberapa dengan alamat e-mel yang sama, beberapa dengan kata laluan yang salah, beberapa dengan aksara yang tidak sah, dsb. Anda mendapat idea - terdapat pelbagai cara untuk mengesahkan bahawa ia lulus dan gagal. Ini sangat kasar! Ini bermakna setiap kali anda menukar fungsi pendaftaran pengguna, anda perlu melakukan pendaftaran yang sama untuk memastikan tiada masalah timbul.
Atau anda boleh menulis satu set ujian untuk mengendalikannya dan menjalankannya setiap kali kod berubah.
Jadi, ya, menulis ujian unit boleh mengambil banyak masa, tetapi lihat pada masa yang disimpan setiap kali anda mengubah suai unit kod. Ini amat berbaloi dan boleh membantu menangani isu lebih awal (iaitu sebelum dikeluarkan kepada pengeluaran) yang mungkin terlepas kerana seseorang terlupa untuk mengejek satu pilih atur ujian.
Apabila menulis ujian unit, anda bukan sahaja meningkatkan kualiti kod anda dengan memastikan ia benar-benar berfungsi, tetapi pada asasnya anda juga menyediakan dokumentasi yang dihadapi oleh pembangun.
Jika anda sedang menguji unit ciri yang terbina dalam produk anda, anda akan menyediakan dokumentasi tentang cara ciri tersebut berfungsi, bila ia harus gagal dan bila ia harus lulus.
Dengan itu datang beberapa andaian: Secara khusus, anda secara logiknya menamakan dan mengumpulkan fungsi anda dan ujian yang berkaitan dengannya, dan anda sedang menguji setiap fungsi dengan betul.
Dengan PHPUnit, ujian unit WordPress boleh melaksanakan penegasan yang mudah dibaca dengan mudah. Anda hanya mengisytiharkan assertTrue, assertFalse, atau sebarang penegasan lain yang tersedia pada fungsi yang membentuk projek anda.
Mengikuti contoh di atas, ini bermakna anda boleh menulis fungsi yang memastikan fungsi pendaftaran pengguna gagal apabila cuba mendaftar dengan alamat e-mel kosong:
$this->assertFalse( registerNewUser( '' ) );
Mungkin satu contoh yang mudah, tetapi perkara itu tetap: kod anda menjadi pendokumentasian sendiri dan hanya memerlukan anda menulis ujian unit yang jelas.
Mungkin salah satu kelebihan ujian unit yang paling dipandang rendah ialah ia boleh membantu memacu seni bina sesuatu projek. Lazimnya, pembangunan tema atau pemalam boleh bermula dengan salah satu daripada dua cara:
Ini bukan perkara yang buruk, tetapi saya rasa ia lemah (saya akan menjadi orang pertama yang mengakui bahawa saya melakukan lebih daripada yang saya mahu kongsikan!). Tetapi langkah "tulis kod" datang dengan banyak tanggungjawab, bukan?
Ia sangat biasa kepada sesiapa sahaja yang telah mengekod untuk masa yang lama sehingga anda akhirnya menyedari, "Oh... saya tidak terfikir tentang itu."
Jika anda bernasib baik, ini biasanya bermakna anda boleh menulis kaedah pembantu atau bersyarat lain untuk mengendalikan kes yang anda abaikan, tetapi dalam kes yang paling teruk, ini bermakna anda mungkin perlu mereka bentuk semula keseluruhan kelas anda Atau keseluruhan koleksi fungsi yang menyelesaikan masalah ini.
Ujian unit, walaupun tidak sempurna, boleh membantu mengurangkan keadaan ini.
Pertimbangkan hakikat bahawa dari awal, anda mempunyai senarai semua ciri yang anda mahu tema atau pemalam anda tawarkan. Anda belum menulis sebarang kod lagi, tetapi mungkin anda mempunyai beberapa jenis lakaran UI dan/atau satu set gambar rajah kelas.
接下来,您开始编写要编写的测试以测试您的项目。回想一下,单元测试的一部分是将代码分解为尽可能的原子单元,因此您的任务是为每个单元编写单元测试,咳咳。
由于单元测试的性质,您本质上会以不同的方式思考您的代码:您正在考虑“编写测试”,而不是“编写代码”,并且因为您必须在更原子的级别上进行思考,您会情不自禁地考虑经常被归入“编写代码”的边缘案例。
作为开发人员,我们非常习惯使用不断强化我们编写代码的约定。我的意思是,我们倾向于提供缩写的变量名称、神秘的函数名称和类名称,这些名称对于您自己或项目团队之外的任何人来说可能没有任何意义。
单元测试不一定是编写更易于阅读的代码的关键,但它可以进一步帮助提供更清晰的函数名称。
回想一下您读过的第一本编程书、您参加的第一堂计算机科学课或者您看到的第一段开源代码,方法名称通常是动词。为什么他们不应该这样?方法是封装代码的方法,做一些事情。但随着我们在项目上工作的时间越来越长,我们变得越来越懒,我们的代码从“register_user_and_email_password()
”变成“new_account()
”。
显然,前者比后者更清晰,但如果我们致力于高质量的单元测试,并且希望确保我们的单元测试易于阅读,为了使它们易于阅读,我们的函数名称必须易于阅读。
这不是更容易阅读吗:
$this->assertFalse( register_user_and_email_password( '' ) );
而不是这个?
$this->assertFalse( new_account( '' ) );
同样,这也许是一个简单的示例,但原则仍然是:编写良好的单元测试,以帮助自我记录驱动函数语言的代码。
我们已经讨论了单元测试的基础知识以及主要优点,但是我们还没有讨论单元测试带来的缺点,我们甚至还没有考虑如何将其合并到我们的项目中。工作流程。
因此,在下一篇文章中,我们将尝试做到这一点。
Atas ialah kandungan terperinci Teori Pengujian Unit (bersambung): Bahagian 2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!