Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Creative Coding
Code

Panduan Permulaan Ujian Unit: Membina Plugin yang Boleh Diperiksa

by
Length:LongLanguages:

Malay (Melayu) translation by Taufan Prasetyo Basri (you can also view the original English article)

Di bahagian pertama siri ini, kami telah melihat tahap tinggi pada metodologi ujian dan memberikan beberapa kes tentang mengapa bermanfaat bagi kami untuk memulakan projek WordPress kami. Kami juga mengambil masa untuk menyiapkan PHPUnit dan Pengujian WordPress untuk memulakan membina plugin yang boleh diuji pertama kami.

Dalam artikel akhir ini, kita akan menentukan metodologi untuk ujian unit, mula memasukkannya ke dalam kerja kita, dan berjalan dengan plugin berfungsi sepenuhnya (walaupun sederhana) yang juga mempunyai satu set ujian kecil untuk memastikan ia berfungsi dengan tepat seperti yang diharapkan.


Kaedah pengujian Unit

Ketika datang ke pengujian, biasanya terdapat dua cara untuk melakukannya:

  • Ujian menulis, kemudian menulis kod untuk membuat ujian lulus
  • Tulis kod anda, kemudian menulis ujian yang lulus

Dalam pengalaman saya, pendekatan pertama adalah lebih baik. Diberikan, ini adalah hampir mustahil untuk dilakukan dalam konteks aplikasi yang telah wujud, tetapi jika anda sedang bermula dari bawah ke atas – yang kami akan – ia adalah pendekatan yang lebih baik dan ini sebabnya mengapa: Sebaik sahaja anda telah menulis sesuatu permohonan, anda tahu bagaimana ia berfungsi. Oleh itu, ia boleh menjadi sangat sukar untuk menulis ujian yang meregangkan aplikasi apabila anda secara semula jadi tahu bagaimana ia berfungsi.

Untuk itu, saya lebih baik untuk menulis ujian terlebih dahulu. Dengan cara ini, ujian anda bukan sahaja termasuk cara program seharusnya berfungsi, tetapi ia juga menjadi satu bentuk dokumentasi yang memperlihatkan fungsi apa yang dimaksudkan dan pada akhirnya akan menghasilkan kegagalan apabila fungsinya tidak berfungsi sebagaimana mestinya.

Dengan itu, kami akan membina metodologi mudah ini:

  • Tulis ujian dan jalankannya. Ia sudah tentu akan gagal.
  • Tulis kod yang cuba menyebabkan ujian lulus.
  • Jika ujian berlalu, kami akan beralih kepada fungsi seterusnya; sebaliknya, kami mengulangi proses itu sehingga ia lulus.

Akhirnya, sebagai penyegar, plugin kami akan memberikan mesej aluan khusus kepada pengunjung berdasarkan jika mereka telah mengklik melalui laman dari Google atau Twitter. Kami akan juga akan menulis ini dalam apa-apa cara bahawa ia akan menjadi lebih mudah untuk mengembangkan dengan perkhidmatan tambahan, sekiranya anda mahu berbuat demikian pada masa akan datang.


Membina sebuah Plugin Testable

Pada masa ini, Inilah masanya untuk mula menulis beberapa kod; Walau bagaimanapun, tidak seperti kebanyakan projek, kita tidak akan melompat ke dalam kod khusus WordPress sahaja lagi. Sebaliknya, kami akan merancang kelas ujian unit kami. Jika anda telah dirangka berdasarkan apa yang kita kongsi dalam jawatan pertama atau bagaimana kita telah menkonfigurasi ia GitHub direktori plugin anda, kemudian anda harus mempunyai satu fail hello_reader_tests.php yang terletak di direktori ujian/wordpress-ujian. Anda tidak perlu mengikuti pertubuhan itu, sudah tentu, tetapi ia akan membantu seperti kita maju melalui projek.

Mari kita tunas keluar unit ujian kelas:

Sekarang, cuba untuk menjalankan ujian menggunakan dari terminal menggunakan PHP unit. Menganggap bahawa anda menjalankan PHP unit dari pemasangan MAMP tempatan anda, anda sepatutnya boleh membuat:

$ /Applications/MAMP/bin/php/php5.3.6/bin/phpunit ./hello_reader_tests.php

Pada masa ini, anda akan dapat melihat kegagalan:

Failing Tests

baguslah begitu! Ini bermakna PHPUnit telah dipasang dan berjalan dan rangka kerja ujian WordPress anda itu bersedia untuk pergi. Ujian gagal hanya kerana kita tidak pernah menulis sebarang ujian. Mari kita bermula melakukan perkara itu.

Ujian pertama kami

Pertama, mari kita menulis satu ujian untuk memastikan bahawa plugin kami dimulakan, instantiated, dan sedia untuk ujian. Ingat awal dalam artikel pertama kami disimpan merujuk kepada contoh Hello Reader ke pelbagai PHP $GLOBALS. Ini adalah bagaimana kita akan dapat mengakses bahawa contoh yang menggunakan rangka kerja ujian. Jadi mari kita Kemaskini Terakhir ujian unit kami kelihatan seperti ini:

Ambil perhatian bahawa kerana ruangan, saya akan meninggalkan keluar komen kod tetapi plugin sepenuhnya mengulas dan ujian akan disediakan di GitHub.

Di atas, kami telah setup merujuk kepada contoh plugin supaya kita boleh mengaksesnya sepanjang kami unit test. Kami menggunakan kaedah setUp untuk merujuk rujukan kepada plugin dari $GLOBALS. Walaubagaimanapun, kami telah memperkenalkan satu lagi fungsi yang dipanggil testPluginInitialization. Fungsi ini mengesahkan bahawa rujukan kami telah setUp dalam kaedah persediaan itu tidak Batal.

Jika anda jalankan semula ujian tersebut, anda kini perlu mendapatkan ujian lulus dan terminal anda sepatutnya kelihatan seperti ini:

Passing Tests

Ada takeaway yang penting di sini: nota bahawa fungsi tunggal kami telah disediakan di atas mempunyai maksud jelas: untuk mengesahkan bahawa plugin dimulakan dengan betul. Namanya fungsi yang jelas dan mengandungi satu menegaskan kenyataan. Ini adalah cara yang bagus untuk model ujian baki kami terutamanya kerana ia menjadikannya mudah untuk mencari pepijat apabila mereka muncul. Fikirkan begini: Jika anda memasukkan beberapa berbeza menegaskan kenyataan dalam fungsi tunggal, ia akan menjadi sukar untuk menentukan yang menegaskan kenyataan gagal.

Bahagian pertama

Sekarang bahawa kita sudah mendapat diperkenalkan kepada cara menulis unit test, menjalankan unit test, dan menilai bagaimana mereka lulus atau bagaimana mereka gagal, mari kita mula melaksanakan fungsi untuk plugin. Pertama, kita akan perlu sediakan penapis kandungan kerana kita akan dapat appending teks ke awal kandungan. Di berikut dengan kaedah yang kita ditentukan lebih awal dalam artikel ini, mari kita tulis ujian kami terlebih dahulu.

Ujian tertentu ini akan memandang untuk melihat jika kita telah dilampirkan satu set khusus teks untuk bahagian pertama pos kepada:

Jika anda menjalankan ujian tepat kerana ia adalah, ia juga tidak akan gagal – sebaliknya, PHPUnit akan mengembalikan ralat kerana kaedah tidak ditakrifkan dalam plugin. Jadi mari kita menambah bahawa kini. Kemaskini Terakhir plugin untuk kelihatan seperti ini:

Sekarang cubalah untuk menjalankan ujian. Ujian tidak akan mengebom, tetapi anda akan dapat melihat kegagalan bersama-sama dengan mesej yang jelas tentang mengapa ujian gagal sebenarnya:

Jadi, selaras dengan kaedah kami, kami ingin membuat ujian ini lulus. Untuk berbuat demikian, kita perlu memastikan bahawa kandungan pos mengandungi rentetan teks - dalam kes ini, 'TEST CONTENT', untuk menjadikannya lulus. Jadi mari kita cuba ini. Kemaskini Terakhir fungsi sama dalam plugin untuk menambah rentetan sebelum kandungan:

Dan sekali lagi, kita ulangkan ujian hanya untuk melihat bahawa ia gagal. Sekiranya anda melihat ujian kami, ini kerana ia melihat kandungan kami sama dengan rentetan 'TEST CONTENT'. Sebaliknya, kita perlu pastikan bahawa rentetan bermula pada kandungan. Ini bermakna kita perlu mengemas kini ujian kami. Nasib baik, PHPUnit mempunyai fungsi assertContains. Jadi mari kita Kemaskini kod kita untuk menggunakannya:

Sekali lagi, ulangi ujian dan anda harus melihat bahawa ujian sekarang berlalu. Menggerunkan! Kini, kita perlu menulis mesej yang disuaikan untuk orang-orang yang datang dari Twitter dan orang-orang yang datang dari Google.

Menyambut Pengunjung Twitter kami

Terdapat beberapa cara yang berbeza yang boleh kita periksa untuk melihat bagaimana pengguna tiba di halaman yang diberikan. Kadang-kadang kita boleh menyemak nilai-nilai dalam pelbagai $_GET, kadang-kadang kita boleh interrogate pelbagai $_SERVER, atau kadang-kadang kita boleh menyemak sesi pengguna. Untuk tujuan contoh ini, kami akan mencari 'twitter.com' boleh didapati di $ _SERVER ['HTTP_REQUEST']. Saya katakan ini supaya anda boleh mengikuti bersama dengan apa yang kita lakukan dalam kod.

Jadi, lazimnya bercakap, add_welcome_message itu perlu menyemak untuk melihat jika permintaan datang daripada Twitter dan kemudian menyesuaikan mesej sewajarnya. Kerana kita berada dalam ujian setiap bahagian fungsi perniagaan, kita boleh menulis satu fungsi yang boleh menilai sama ada atas permintaan datang dari Twitter. Jadi mari kita tulis ujian baru:

Dalam plugin:

Dalam ujian:

Kita sudah jelas penipuan nilai HTTP_REFERER, tetapi yang ada okay untuk tujuan contoh ini. Titik yang masih kekal: jalankan ujian, ia akan gagal dan begitu kita perlu melaksanakan fungsi plugin untuk lulus:

Memeriksa ujian kini akan menyebabkan ujian lulus. Tetapi tunggu – kita perlu menjadi lengkap. Mari pastikan kami menjalankan ujian untuk mengesahkan bahawa fungsi ini gagal apabila perujuk bukan dari Twitter.

Perhatikan bahawa kami telah mengemas kini HTTP_REFERER dan kami telah menukar assertTrue to assertFalse. Membenarkan segala-galanya adalah benar, menjalankan ujian dan mereka perlu lulus.

Mengulangi Semula untuk Google

Menyediakan mesej tersuai untuk Google akan memerlukan perkara yang sama yang kami lakukan untuk Twitter, iaitu spoof HTTP_REFERER dan kemudian kembali benar atau palsu untuk fungsi penolong. Jadi, untuk mengelakkan bunyi yang berlebihan, saya akan simpan bahagian ini seberapa ringkas yang mungkin. Langkah yang sama mesti diikuti seperti untuk Twitter.

Pertama, kita tunas keluar fungsi Pembantu di plugin:

Kemudian kami melepaskan ujian:

Menjalankan ujian kerana ianya sekarang akan menyebabkan kegagalan. Jadi, mari kita laksanakan fungsi is_from_google():

Dan sekarang, ujian harus lulus. Tetapi, sekali lagi, kita perlu lengkap jadi mari kita menuliskan ujian kegagalan untuk menganggap bahawa fungsi itu tidak akan kembali benar apabila pengguna datang dari tempat lain:

Akhir sekali, jalankan ujian anda. Mengizinkan segala yang lain adalah betul, anda sepatutnya mempunyai enam ujian lulus.

Menarik Semuanya Bersama

Pada ketika ini, kami mendapat semua yang kita perlukan untuk memaparkan mesej selamat datang kepada pengguna kami. Satu-satunya perkara ialah kita perlu untuk refactor ujian awal kami yang menyemak 'TEST CONTENT.' Kini, kami perlu memperkenalkan ujian untuk kes berikut:

  • Apabila pengguna berasal dari Twitter, kami akan berkata 'Selamat datang dari Twitter!'
  • Apabila pengguna datang dari Google, kami akan berkata 'Selamat datang dari Google!'
  • Apabila pengguna datang dari tempat lain, kami tidak akan mempersembahkan apa-apa.

Jadi mari kita keluarkan ujian yang kita buat sebelum testAddWelcomeMessage di samping menambah tiga ujian baru.

Pertama, kami akan menambah ujian yang menyemak mesej selamat datang Twitter.

Dalam plugin, kami akan mengurangkan add_welcome_message ini:

Dan kami akan menambah ujian Twitter, pertama:

Pada ketika ini, ini topi lama, bukan? Jalankannya, ujian akan gagal. Laksanakan add_welcome_message untuk kelihatan seperti ini:

Jalankan lagi, dan ia akan berlalu. Seterusnya ialah ujian Google:

Jalankan ujian, mungkinkah gagal, kemudian kemas kini add_welcome_message dalam plugin untuk mengandungi cek menggunakan fungsi pembantu yang kami tulis sebelum ini:

Pada ketika ini, anda harus mempunyai plugin berfungsi sepenuhnya yang mempunyai tujuh ujian unit lulus!


Kesimpulan

Seperti yang anda dapat lihat, ujian unit memperkenalkan tahap pembangunan tambahan tetapi boleh membayar dengan ketara dalam kod yang boleh dipelihara, teratur, dan boleh diuji. Apabila aplikasi anda bertambah, ujian berterusan untuk mengesahkan bahawa projek anda berfungsi seperti yang diharapkan dapat memberikan kepintaran. Sudah tentu, ini adalah contoh kecil bagaimana ujian unit berfungsi. Memohon amalan ini boleh membayar dalam projek yang lebih besar dan / atau rumit.

Akhirnya, anda boleh mencari plugin ini, Ujian WordPress, dan unit Hello Reader ujian sepenuhnya mengulas mengenai GitHub.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.