Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk menguji pakej dalam Go?
Dengan menggunakan rangka kerja ujian terbina dalam bahasa Go, pembangun boleh menulis dan menjalankan ujian untuk kod mereka dengan mudah. Fail ujian berakhir dengan _test.go dan mengandungi fungsi ujian bermula dengan Test, dengan parameter *testing.T mewakili contoh ujian. Mesej ralat dilog menggunakan t.Error(). Ujian boleh dijalankan dengan menjalankan arahan go test. Subujian membenarkan fungsi ujian dipecahkan kepada bahagian yang lebih kecil dan dicipta melalui t.Run(). Contoh praktikal termasuk fail ujian yang ditulis untuk fungsi IsStringPalindrome() dalam pakej utils, yang menguji ketepatan fungsi menggunakan satu siri rentetan input dan output yang dijangkakan.
Bahasa Go menyediakan rangka kerja ujian terbina dalam yang berkuasa yang membolehkan pembangun menulis dan menjalankan ujian dengan mudah untuk kod mereka. Berikut ialah cara menggunakan pakej ujian Go untuk menguji program anda.
Dalam Go, fail ujian berakhir dengan _test.go dan diletakkan dalam direktori yang sama dengan pakej yang ingin anda uji. Fail ujian mengandungi satu atau lebih fungsi ujian yang bermula dengan Ujian
diikuti dengan fungsi yang akan diuji. Test
开头,后面跟要测试的功能。
以下是一个示例测试函数:
import "testing" func TestAdd(t *testing.T) { if Add(1, 2) != 3 { t.Error("Add(1, 2) returned an incorrect result") } }
*testing.T
参数表示测试实例。错误信息使用 t.Error()
记录。
可以通过运行以下命令来运行测试:
go test
如果测试成功,将显示诸如 "PASS" 之类的消息。如果出现错误,将显示错误信息。
子测试允许将一个测试函数分解成更小的部分。这有助于组织测试代码并提高可读性。
以下是如何编写子测试:
func TestAdd(t *testing.T) { t.Run("PositiveNumbers", func(t *testing.T) { if Add(1, 2) != 3 { t.Error("Add(1, 2) returned an incorrect result") } }) t.Run("NegativeNumbers", func(t *testing.T) { if Add(-1, -2) != -3 { t.Error("Add(-1, -2) returned an incorrect result") } }) }
假设我们有一个名为 utils
的包,里面包含一个 IsStringPalindrome()
函数,用于检查一个字符串是否是回文字符串。
下面是如何编写一个测试文件来测试这个函数:
package utils_test import ( "testing" "utils" ) func TestIsStringPalindrome(t *testing.T) { tests := []struct { input string expected bool }{ {"", true}, {"a", true}, {"bb", true}, {"racecar", true}, {"level", true}, {"hello", false}, {"world", false}, } for _, test := range tests { t.Run(test.input, func(t *testing.T) { if got := utils.IsStringPalindrome(test.input); got != test.expected { t.Errorf("IsStringPalindrome(%s) = %t; want %t", test.input, got, test.expected) } }) } }
在这个测试文件中:
tests
数组定义了一系列输入字符串和预期的输出。for
循环遍历 tests
数组,并使用 t.Run()
创建子测试。utils.IsStringPalindrome()
函数并将其结果与预期结果进行比较。如果结果不一致,它使用 t.Errorf()
t.Error()
. 🎜🎜Run Tests🎜🎜Anda boleh menjalankan ujian dengan menjalankan arahan berikut: 🎜rrreee🎜Jika ujian berjaya, mesej seperti "LULUS" akan dipaparkan. Jika ralat berlaku, mesej ralat akan dipaparkan. 🎜🎜Menggunakan Subujian🎜🎜Subtest membolehkan memecahkan fungsi ujian kepada bahagian yang lebih kecil. Ini membantu mengatur kod ujian dan meningkatkan kebolehbacaan. 🎜🎜Begini cara untuk menulis subtest: 🎜rrreee🎜Kes praktikal🎜🎜Andaikan kita mempunyai pakej bernama utils
, yang mengandungi fungsi IsStringPalindrome()
untuk Memeriksa sama ada rentetan ialah palindrom. 🎜🎜Begini cara menulis fail ujian untuk menguji fungsi ini: 🎜rrreee🎜Dalam fail ujian ini: 🎜ujian
Tatasusunan mentakrifkan satu siri rentetan input dan output yang dijangkakan . 🎜for
menggelung melalui tatasusunan tests
dan mencipta subtest menggunakan t.Run()
. 🎜utils.IsStringPalindrome()
dan membandingkan keputusannya dengan hasil yang dijangkakan. Jika keputusan tidak konsisten, ia menggunakan t.Errorf()
untuk log ralat. 🎜🎜Atas ialah kandungan terperinci Bagaimana untuk menguji pakej dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!