国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah pembangunan bahagian belakang tutorial php PHP Master | Pengenalan kepada ujian objek mengejek

PHP Master | Pengenalan kepada ujian objek mengejek

Feb 26, 2025 am 11:27 AM

PHP Master | An Introduction to Mock Object Testing

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.
Jika anda adalah sebahagian daripada pasukan pembangunan, kod anda biasanya bergantung kepada kod yang ditulis oleh rakan sepasukan anda. Tetapi bagaimana jika kod mereka tidak tersedia pada masa ini - sebagai contoh, rakan sepasukan anda belum selesai menulis? Atau, bagaimana jika kod yang anda perlukan memerlukan kebergantungan luaran lain yang sukar ditetapkan? Bagaimana jika anda tidak dapat menguji kod anda kerana faktor lain yang anda tidak dapat mengawal? Adakah anda akan melepak dan tidak melakukan apa -apa, menunggu pasukan anda selesai atau semuanya sudah siap? Sudah tentu tidak! Dalam artikel ini, saya akan menerangkan cara menulis kod untuk menyelesaikan masalah ketergantungan ini. Idealnya, anda memerlukan pengetahuan latar belakang tentang ujian unit, dan sudah ada artikel pengenalan yang sangat baik mengenai ujian unit yang ditulis oleh Michelle Saver di Sitepoint. Walaupun artikel ini tidak memerlukannya, sila lihat artikel saya yang lain mengenai ujian pangkalan data automatik.

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:

  1. 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.

  2. 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?

  1. 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.

  2. 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:

    1. Tentukan bilangan kali kaedah akan dipanggil (diperlukan).
    2. Tentukan nama kaedah (diperlukan).
    3. Tentukan parameter (pilihan) yang dijangkakan oleh kaedah.
    4. 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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Skop pembolehubah PHP dijelaskan Skop pembolehubah PHP dijelaskan Jul 17, 2025 am 04:16 AM

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.

Bagaimana cara mengendalikan fail memuat naik dengan selamat di PHP? Bagaimana cara mengendalikan fail memuat naik dengan selamat di PHP? Jul 08, 2025 am 02:37 AM

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.

Mengulas kod dalam php Mengulas kod dalam php Jul 18, 2025 am 04:57 AM

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.

Bagaimana penjana berfungsi dalam php? Bagaimana penjana berfungsi dalam php? Jul 11, 2025 am 03:12 AM

Ageneratorinphpisamemory-efficientwaytoiterateOverlargedatasetsbyieldingvaluesonateatimeNsteadofreturningthemallatonce.1.GeneratorSuseTheyEldeyWorderWorderToProducevaluuesondemand,

Petua untuk menulis komen php Petua untuk menulis komen php Jul 18, 2025 am 04:51 AM

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.

Belajar PHP: Panduan Pemula Belajar PHP: Panduan Pemula Jul 18, 2025 am 04:54 AM

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

Cara mengakses watak dalam rentetan dengan indeks dalam php Cara mengakses watak dalam rentetan dengan indeks dalam php Jul 12, 2025 am 03:15 AM

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.

Tutorial pemasangan php cepat Tutorial pemasangan php cepat Jul 18, 2025 am 04:52 AM

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

See all articles