Bahasa Go ialah bahasa pengaturcaraan yang pantas, selamat dan ringkas yang turut menyokong ujian dan sangat mesra. Apabila membangun dan menguji di Golang, kualiti dan ketepatan kod boleh dipertingkatkan, menjadikannya lebih mudah bagi pembangun untuk mengulang semasa pembangunan projek.
Artikel ini akan memperkenalkan kaedah ujian di Golang, termasuk ujian unit, ujian penanda aras, ujian prestasi dan ujian sempadan. Kami akan berkongsi kes ujian biasa dan teknik ujian untuk membantu pembaca memahami kaedah dan kemahiran ujian Golang dengan lebih baik, serta meningkatkan kecekapan dan kualiti pembangunan.
1. Ujian unit
1. Rangka kerja asas kes ujian
Rangka kerja asas kes ujian ialah:
func TestFunctionName(t *testing.T) { // testing function }
TestFunctionName ialah nama kaedah ujian dan mesti bermula dengan Ia bermula dengan Ujian, dan Nama Fungsi berikut boleh dinamakan sewenang-wenangnya. testing.T ialah konteks ujian, digunakan untuk menjadualkan kaedah akses ujian dan merekod status ujian. Ia boleh digunakan untuk melaporkan kegagalan dan ralat semasa ujian dan keputusan ujian output kepada konsol.
Contoh kod:
package main import "testing" func Sum(x int, y int) int { return x + y } func TestSum(t *testing.T) { got := Sum(1, 2) want := 3 if got != want { t.Errorf("Sum(1,2) = %d; want %d", got, want) } }
Apabila program berjalan, jika hasil output tidak konsisten dengan jangkaan, mesej ralat akan dikeluarkan, contohnya:
--- FAIL: TestSum (0.00s) main_test.go:11: Sum(1,2) = 4; want 3 FAIL exit status 1 FAIL command-line-arguments 0.005s
2. Penamaan dan organisasi kes ujian
Nama kaedah ujian Golang mesti diawali dengan Test, yang membolehkan rangka kerja ujian mengenalinya secara automatik dan melaksanakannya apabila menjalankan perintah go test. Pada masa yang sama, untuk mengelakkan konflik dengan kaedah ujian lain dengan nama yang sama, penamaan kaedah ujian harus memastikan keunikan.
Untuk menyusun kes ujian dengan lebih baik, anda boleh menambah beberapa pengecam yang boleh dikenal pasti di hadapan kes ujian, seperti:
Melalui ujian unit, kualiti dan ketepatan kod Golang boleh disahkan, termasuk:
<. 🎜>Sama ada fungsi mengembalikan hasil yang dijangkakan
// Add 两个整数x和y func Add(x, y int) int { return x + y }
func TestAdd(t *testing.T) { cases := []struct { in1, in2, want int }{ {1, 2, 3}, {0, 0, 0}, {-1, 1, 0}, } for _, c := range cases { got := Add(c.in1, c.in2) if got != c.want { t.Errorf("Add(%d, %d) == %d, want %d", c.in1, c.in2, got, c.want) } } }
func BenchmarkFunctionName(b *testing.B) { // Testing code }
func BenchmarkAdd(b *testing.B) { for i := 0; i < b.N; i++ { Add(1, 2) } }
BenchmarkAdd-4 2000000000 0.29 ns/op PASS ok _/Users/test/main 1.028s
"BenchmarkAdd" mewakili ujian penanda aras Nama
func TestPerfAdd(t *testing.T) { for i := 0; i < 100000; i++ { Add(1, 2) } }
func TestBubbleSort(t *testing.T) { tests := []struct { name string in []int want []int }{ {"Sorted", []int{1, 2, 3, 4, 5}, []int{1, 2, 3, 4, 5}}, {"Reverse", []int{5, 4, 3, 2, 1}, []int{1, 2, 3, 4, 5}}, {"FewElement", []int{5, 3}, []int{3, 5}}, {"Duplicate", []int{5, 3, 5, 2, 2}, []int{2, 2, 3, 5, 5}}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { BubbleSort(tt.in) if !reflect.DeepEqual(tt.in, tt.want) { t.Errorf("test case %s expects %v but actual is %v", tt.name, tt.want, tt.in) } }) } }
Proses beberapa input yang tidak normal (seperti nombor negatif, 0, nilai maksimum/minimum)
Apabila menguji kod Golang, anda harus mempertimbangkan kepelbagaian kes ujian untuk dapat menyediakan ujian yang berguna dan komprehensif untuk pelbagai bahagian program. Rangka kerja ujian Golang menyokong ujian unit, ujian penanda aras, ujian prestasi dan ujian sempadan, dan kami boleh memilih mengikut keperluan sebenar. Bukan itu sahaja, kita juga perlu mengikuti beberapa amalan terbaik ujian, seperti menyeragamkan penamaan kaedah ujian, mengagihkan tugas ujian secara rasional, mengekstrak logik ujian berulang dan menjadikannya lebih mudah untuk menjalankan ujian dengan cepat. Saya percaya bahawa selepas menguasai kemahiran ujian ini, pembaca akan dapat menjalankan ujian kod yang lebih mendalam semasa membangunkan Golang, dan meningkatkan kecekapan ujian dan kualiti kod pembangunan.
Atas ialah kandungan terperinci kaedah ujian ujian golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!