


Titik utama ujian unit objek simulasi
- objek mock adalah pengganti yang digunakan dalam ujian unit untuk menggantikan objek sebenar, mensimulasikan tingkah laku yang berjalan objek sebenar. Simulasi objek berguna apabila kebergantungan objek tidak dilaksanakan atau bergantung kepada faktor -faktor yang sukar untuk disimulasikan.
- Dalam ujian, objek mengejek dicipta dan disuntik ke dalam sistem untuk memenuhi kebergantungan, yang membolehkan pemaju mula menulis logik perniagaan.
- Walaupun objek mock buatan tangan boleh digunakan pada mulanya, kerana keperluan ujian menjadi lebih kompleks, rangka kerja mock sebenar mungkin diperlukan. Rangka kerja simulasi boleh menjimatkan masa dan menghasilkan kod bersih.
- Rangka Kerja Simulasi PHPUNIT adalah alat yang boleh digunakan untuk membuat objek mengejek untuk ujian. Proses ini melibatkan mengenal pasti objek untuk disimulasikan, menentukan kaedah yang akan disimulasikan, dan menentukan parameter dan nilai pulangan.
- Objek simulasi digunakan terutamanya untuk ujian unit untuk mengasingkan sistem yang diuji. Mereka mensimulasikan tingkah laku yang berlari objek sebenar yang kompleks dan sangat berguna untuk menguji bagaimana modul tertentu aplikasi berinteraksi dengan modul lain.
kes objek simulasi
Seperti yang anda mungkin dapati, objek mengejek dapat menyelesaikan situasi rumit yang saya nyatakan dalam pengenalan. Tetapi apakah objek mengejek? Objek mock adalah objek pengganti yang menggantikan pelaksanaan sebenar objek sebenar. Mengapa anda mahukan objek pengganti dan bukannya objek sebenar? Objek mock digunakan untuk ujian unit untuk mensimulasikan tingkah laku yang berjalan objek sebenar dalam kes ujian. Dengan menggunakannya, fungsi objek yang anda lakukan akan lebih mudah untuk diuji. Berikut adalah beberapa situasi yang berguna semasa menggunakan objek mengejek:-
Pelaksanaan sebenar satu atau lebih kebergantungan objek
belum dilaksanakan. Katakan tugas anda adalah untuk melakukan beberapa pemprosesan beberapa data dalam pangkalan data. Anda mungkin memanggil beberapa bentuk akses data ke objek atau repositori data, tetapi bagaimana jika pangkalan data belum ditetapkan? Bagaimana jika tiada data tersedia (saya telah menemui terlalu banyak kali) atau kod untuk menanyakan pangkalan data belum ditulis? Simulasi objek akses data mensimulasikan objek akses data sebenar dengan mengembalikan beberapa nilai yang telah ditetapkan. Ini menjimatkan anda dari beban menubuhkan pangkalan data, mencari data, atau kod menulis yang menanyakan pangkalan data.
-
Pelaksanaan sebenar kebergantungan objek bergantung kepada faktor -faktor yang sukar untuk mensimulasikan. Katakan anda ingin mengira bilangan suka dan komen pada catatan Facebook pada waktu siang. Di manakah anda mendapat data? Akaun pemaju Facebook anda baru. Alamak, anda masih tidak mempunyai kawan! Bagaimana anda akan mensimulasikan suka dan komen? Simulasi objek menyediakan cara yang lebih baik untuk menyukai atau mengulas pada beberapa jawatan daripada masalah rakan sekerja anda. Jika anda ingin memaparkan data pada hari ke hari, bagaimanakah anda mensimulasikan semua operasi ini dalam jangka masa? Bagaimana dengan bulanan? Bagaimana jika sesuatu yang tidak dapat dibayangkan berlaku, apa yang perlu saya lakukan jika Facebook sedang turun? Objek mock boleh berpura -pura menjadi perpustakaan Facebook dan mengembalikan data yang anda perlukan. Anda tidak perlu melalui masalah yang saya sebutkan untuk memulakan tugas anda.
Objek simulasi dalam amalan
Sekarang kita tahu apa objek mengejek, mari kita lihat beberapa contoh praktikal. Kami akan melaksanakan ciri -ciri mudah yang disebut tadi, seperti mengira suka dan komen di jawatan Facebook. Kami akan bermula dengan ujian unit berikut untuk menentukan jangkaan kami tentang bagaimana objek akan dipanggil dan apakah nilai pulangannya:
<?php class StatusServiceTest extends PHPUnit_Framework_TestCase { private $statusService; private $fbID = 1; public function setUp() { $this->statusService = new StatusService(); } public function testGetAnalytics() { $analytics = $this->statusService->getAnaltyics(1, strtotime("2012-01-01"), strtotime("2012-01-02")); $this->assertEquals(array( "2012-01-01" => array( "comments" => 5, "likes" => 3, ), "2012-01-02" => array( "comments" => 5, "likes" => 3, ), "2012-01-03" => array( "comments" => 5, "likes" => 3, ), "2012-01-04" => array( "comments" => 5, "likes" => 3, ), "2012-01-05" => array( "comments" => 5, "likes" => 3, ) ), $analytics); } }Jika anda menjalankan ujian ini, anda akan mendapat hasil yang gagal. Ini diharapkan kerana kami belum melaksanakan apa -apa lagi! Sekarang mari kita tulis pelaksanaan perkhidmatan. Sudah tentu, langkah pertama adalah mendapatkan data dari Facebook, jadi mari kita lakukan terlebih dahulu:
<?php class StatuService { private $facebook; public function getAnalytics($id, $from, $to) { $post = $this->facebook->get($id); } }Ujian ini juga akan gagal kerana objek Facebook kosong. Anda boleh memasukkan pelaksanaan sebenar dengan membuat contoh sebenar menggunakan ID Aplikasi Facebook, dan lain -lain, tetapi untuk apa? Kita semua tahu bahawa berbuat demikian akan menyebabkan anda menyimpang dari kesakitan tugas di tangan. Kita boleh mengelakkan ini dengan menyuntik objek mengejek! Cara menggunakan objek mock (sekurang -kurangnya dalam kes kami) adalah untuk membuat kelas dengan kaedah mendapatkan () dan mengembalikan nilai mock. Ini sepatutnya menipu pelanggan kita untuk memikirkan ia memanggil pelaksanaan objek sebenar apabila sebenarnya ia hanya dihina.
<?php class StatusServiceTest extends PHPUnit_Framework_TestCase { // test here } class MockFacebookLibrary { public function get($id) { return array( // mock return from Facebook here ); } }Sekarang kita mempunyai kelas mengejek, mari kita instanate contoh dan menyuntikkannya ke statusservice supaya kita dapat menggunakannya. Tetapi pertama, gunakan setter untuk mengemas kini statusservice untuk digunakan dengan perpustakaan Facebook:
<?php class StatusService { // other lines of code public function setFacebook($facebook) { $this->facebook = facebook; } }suntikan mock facebook perpustakaan sekarang:
<?php class StatusServiceTest extends PHPUnit_Framework_TestCase { private $statusService; private $fbID = 1; public function setUp() { $this->statusService = new StatusService(); } public function testGetAnalytics() { $analytics = $this->statusService->getAnaltyics(1, strtotime("2012-01-01"), strtotime("2012-01-02")); $this->assertEquals(array( "2012-01-01" => array( "comments" => 5, "likes" => 3, ), "2012-01-02" => array( "comments" => 5, "likes" => 3, ), "2012-01-03" => array( "comments" => 5, "likes" => 3, ), "2012-01-04" => array( "comments" => 5, "likes" => 3, ), "2012-01-05" => array( "comments" => 5, "likes" => 3, ) ), $analytics); } }
Ujian masih gagal, tetapi sekurang-kurangnya kita tidak lagi menerima kesilapan mengenai kaedah panggilan pada bukan objek. Lebih penting lagi, anda hanya menyelesaikan keperluan untuk memenuhi pergantungan ini. Anda kini boleh mula menulis logik perniagaan untuk tugas yang anda berikan dan lulus ujian.
<?php class StatuService { private $facebook; public function getAnalytics($id, $from, $to) { $post = $this->facebook->get($id); } }
pergi satu langkah lebih jauh: Gunakan rangka simulasi
Walaupun anda boleh menggunakan objek mock buatan tangan apabila anda mula -mula mula, maka, seperti yang saya dapati diri saya, kerana keperluan anda menjadi lebih kompleks, anda mungkin perlu menggunakan kerangka mock sebenar. Dalam artikel ini, saya akan menunjukkan cara menggunakan kerangka mock yang datang dengan phpunit. Dalam pengalaman saya, terdapat beberapa manfaat untuk menggunakan rangka kerja yang mengejek berbanding menggunakan objek mock yang ditulis secara manual:
- anda boleh malas. Saya mendapati ini benar terutamanya apabila berurusan dengan kelas abstrak dengan banyak kaedah abstrak. Anda hanya boleh mensimulasikan beberapa kaedah kelas abstrak atau antara muka. Jika anda melakukan ini secara manual, anda perlu melaksanakan semua kaedah ini secara manual. Ia menjimatkan beberapa kerja menaip dan juga menyusun semula jenis ini;
- anda boleh menulis kod bersih. Kebolehbacaan adalah kunci di sini. Simulasi berasaskan kerangka menjadikan ujian anda lebih mudah difahami kerana simulasi anda ditulis dalam ujian. Anda tidak perlu menatal ke bawah atau bertukar antara fail untuk melihat simulasi menulis sendiri yang ditulis di tempat lain. Bagaimana jika anda perlu memanggil objek mengejek beberapa kali dan mendapatkan hasil yang berbeza? Menggunakan simulasi berasaskan rangka kerja, kod boilerplate if-else yang diperlukan untuk melakukan ini sudah terkandung dengan baik. Oleh itu, lebih mudah difahami.
rangka kerja simulasi menggunakan phpunit
Mari fokus sekarang pada rangka kerja simulasi menggunakan phpunit, langkah -langkah sebenarnya sangat intuitif dan apabila anda dapat memahaminya, ia menjadi sifat kedua. Dalam bahagian ini, kami akan menggunakan rangka kerja simulasi PHPUNIT untuk membuat objek mengejek untuk kes contoh kami. Walau bagaimanapun, sebelum kita melakukan ini, komen atau memadam garis kod dalam ujian yang menggunakan objek mock buatan tangan kami. Kita perlu gagal terlebih dahulu supaya kita dapat lulus. Kemudian, kami akan menyuntik pelaksanaan simulasi baru.
<?php class StatusServiceTest extends PHPUnit_Framework_TestCase { // test here } class MockFacebookLibrary { public function get($id) { return array( // mock return from Facebook here ); } }
Sahkan bahawa ujian gagal semasa menjalankan phpunit. Sekarang, fikirkan bagaimana kita boleh mensimulasikan objek secara manual dan kaedah yang kita mahu panggil. Apa yang kita buat?
-
Langkah pertama adalah untuk mengenal pasti objek yang akan disimulasikan. Dalam fungsi contoh analisis di atas, kami mensimulasikan perpustakaan Facebook. Kami melakukan perkara yang sama seperti dalam langkah pertama.
-
Sekarang kita telah menentukan kelas untuk dihina, kita mesti tahu kaedah di dalam kelas yang akan dihina, dan jika ada kaedah yang ada, tentukan parameter dan nilai pulangan. Templat asas yang saya gunakan dalam kebanyakan kes adalah kira -kira seperti berikut:
- Tentukan bilangan kali kaedah akan dipanggil (diperlukan).
- Tentukan nama kaedah (diperlukan).
- Tentukan parameter (pilihan) yang dijangkakan oleh kaedah.
- Nyatakan nilai pulangan (pilihan)
mari kita gunakan langkah -langkah yang disebutkan sekarang untuk ujian sampel kami.
<?php class StatusServiceTest extends PHPUnit_Framework_TestCase { private $statusService; private $fbID = 1; public function setUp() { $this->statusService = new StatusService(); } public function testGetAnalytics() { $analytics = $this->statusService->getAnaltyics(1, strtotime("2012-01-01"), strtotime("2012-01-02")); $this->assertEquals(array( "2012-01-01" => array( "comments" => 5, "likes" => 3, ), "2012-01-02" => array( "comments" => 5, "likes" => 3, ), "2012-01-03" => array( "comments" => 5, "likes" => 3, ), "2012-01-04" => array( "comments" => 5, "likes" => 3, ), "2012-01-05" => array( "comments" => 5, "likes" => 3, ) ), $analytics); } }
selepas kami membuat objek Facebook mengejek sekali lagi, suntikannya ke dalam perkhidmatan kami sekali lagi:
<?php class StatuService { private $facebook; public function getAnalytics($id, $from, $to) { $post = $this->facebook->get($id); } }
Sekarang, anda harus lulus ujian lagi. Tahniah! Anda telah mula menguji dengan objek mengejek! Mudah -mudahan anda dapat memprogram dengan lebih berkesan dan yang paling penting menghilangkan halangan yang anda hadapi dalam kebergantungan masa depan.
Gambar dari Fotolia
(bahagian FAQ mengenai ujian objek mock harus ditambah di sini, kandungannya konsisten dengan bahagian FAQ dalam teks input, tetapi ia perlu sedikit menulis semula dan digilap untuk mengelakkan pertindihan)
Atas ialah kandungan terperinci PHP Master | Pengenalan kepada ujian objek mengejek. 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.

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

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
