Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Pergi ke ujian liputan, jika kenyataan tidak dilindungi

Pergi ke ujian liputan, jika kenyataan tidak dilindungi

Feb 11, 2024 am 10:36 AM

Pergi ke ujian liputan, jika kenyataan tidak dilindungi

editor php Baicao hari ini memperkenalkan anda kepada kaedah liputan ujian. Dalam proses pembangunan perisian, liputan ujian ialah penunjuk penting, yang boleh membantu kami menilai tahap liputan kod mengikut kes ujian. Dan jika kita mendapati bahawa terdapat kenyataan yang tidak dilindungi, kita boleh menyelesaikan masalah ini melalui beberapa cara. Dalam artikel ini, kami akan meneroka cara menguji liputan dan cara menangani kenyataan yang tidak dilindungi.

Kandungan soalan

Saya mempunyai fungsi go yang dipanggil setupConfig() dan saya mempunyai Test_setupconfig untuk mengujinya dan ia diuji dengan baik. Tetapi apabila saya mengujinya untuk liputan dan melihat laporan HTML, ia menunjukkan bahawa pengendalian saya terhadap beberapa ralat yang dikembalikan oleh pakej Viper tidak dilindungi. Mengapa ini tidak dilindungi? Bagaimana saya harus menangani ini?

Penyelesaian

Laporan liputan memberitahu anda jumlah kod yang telah dilaksanakan semasa ujian. Perkara yang anda lihat ialah penyataan if 块中的 return ini tidak diuji, yang bermaksud anda tidak mempunyai sebarang ujian unit yang direka untuk gagal dan mengembalikan ralat. Semasa menguji kod anda berfungsi apabila diberikan input yang betul, adalah penting juga untuk memastikan bahawa ujian gagal dengan betul dan selamat apabila diberikan input yang salah.

Walau bagaimanapun, ini adalah situasi yang pelik kerana ralat ini bukan dalam pakej anda sendiri, ralat ini datang daripada isu dengan perpustakaan viper 包。此时,重要的是要问自己一个问题“我真正测试的是什么?”。如果您使用 viper 包,那么假设该包经过了彻底的测试,并且通过为 viper 错误创建您自己的测试,您只是在这些测试上加倍,而没有真正的改进。出于这个原因,有时我们选择省略测试这些分支,因为实际上,如果 viper 包错误 - 并假设您的所有输入都是静态的并且像所示的那样进行硬编码 - 那么这不是您的代码的问题,而是 viper.

Jika anda benar ingin mendapatkan liputan 100% dan menguji semua pokok keputusan, satu-satunya cara ialah meletakkan pakej viper di belakang beberapa abstraksi. Kemungkinan besar ia adalah antara muka yang disalurkan ke dalam fungsi tersebut, membenarkan berbilang pelaksanaan sama ada anda sedang menjalankan dalam pengeluaran atau ujian.

Setelah berkata demikian, pengekodan keras semua nilai dalam fungsi seperti ini tidak disyorkan. Sebaik-baiknya, anda mahu nilai struktur konfigurasi datang daripada fail konfigurasi setempat, pembolehubah persekitaran, bendera baris arahan atau gabungannya. Dengan melakukan ini, anda menjadikan fungsi persediaan ini menerima antara muka untuk mendapatkan semula konfigurasi, menjadikan fungsi itu mudah untuk diuji kerana apa yang anda perlu lakukan ialah mengejek pelaksanaan antara muka dalam ujian anda. Jadi ia akan kelihatan seperti ini:

config.go

type ConfigController interface {
    GetInput() Config
}

func setupConfig(controller ConfigController) error {
    config := controller.GetInput()
    // your code here
}
Salin selepas log masuk

config_test.go

type mockConfigController struct {}

func (m *mockConfigController) GetConfig() Config {
    return Config{
        // your config here
    }
}

func Test_setupConfig(t *testing.T) {
    configController := &mockConfigController{}
    err := setupConfig(configController)
    // rest of test here
}
Salin selepas log masuk

Dengan melakukan ini dan menyediakan antara muka terima untuk fungsi setupConfig() anda, ini bermakna anda boleh menyediakan pelaksanaan fungsi untuknya apabila dijalankan dalam pengeluaran, tetapi juga menggunakan data ujian berkod keras untuk mensimulasikannya semasa menjalankan ujian. Ia juga sering digunakan apabila berinteraksi dengan perkhidmatan lain, seperti pangkalan data. Daripada perlu memulakan pangkalan data dan menyambung kepadanya apabila anda menjalankan ujian, anda boleh meminta kod anda menerima antara muka yang memberitahunya cara berinteraksi dengan pangkalan data dan mensimulasikannya dalam ujian anda. Ini membolehkan anda mengasingkan bahagian kod anda dan menguji perkara yang anda mahu sahaja.

Atas ialah kandungan terperinci Pergi ke ujian liputan, jika kenyataan tidak dilindungi. 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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Kaedah Pemantauan PostgreSQL di bawah Debian Kaedah Pemantauan PostgreSQL di bawah Debian Apr 02, 2025 am 07:27 AM

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Bagaimana cara menentukan pangkalan data yang berkaitan dengan model dalam beego orm? Bagaimana cara menentukan pangkalan data yang berkaitan dengan model dalam beego orm? Apr 02, 2025 pm 03:54 PM

Di bawah rangka kerja beegoorm, bagaimana untuk menentukan pangkalan data yang berkaitan dengan model? Banyak projek beego memerlukan pelbagai pangkalan data untuk dikendalikan secara serentak. Semasa menggunakan beego ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

See all articles