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.
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?
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 }
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 }
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!