Rumah > Artikel > pembangunan bahagian belakang > kaedah ujian ujian golang
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 }Kod ujian sepadan:
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) } } }Rangka kerja ujian Go membolehkan kami mencipta kes ujian dengan struktur kawalan, seperti gelung, cawangan dan pengendalian ralat pengecualian. Dalam kod ujian, anda mengesahkan bahawa kod berkelakuan seperti yang direka dengan menghantar parameter input kepada fungsi dan membandingkan nilai output fungsi dengan nilai yang dijangkakan. 2. Ujian penanda aras Ujian penanda aras Golang digunakan untuk membandingkan perbezaan prestasi kod dalam situasi yang berbeza. Penanda aras menjalankan kod beberapa kali dan membandingkan masa berjalan. Jika terdapat perbezaan kelajuan, anda boleh menentukan pelaksanaan yang lebih pantas. Rangka kerja asas ujian penanda aras ialah:
func BenchmarkFunctionName(b *testing.B) { // Testing code }Antaranya, BenchmarkFunctionName mewakili nama kaedah ujian penanda aras, yang mesti bermula dengan Penanda Aras dan FunctionName berikut boleh dinamakan sewenang-wenangnya. pengujian.B ialah konteks ujian, digunakan untuk mengawal status dan lelaran ujian. Semasa ujian penanda aras, anda boleh menggunakannya untuk mengawal bilangan ujian dijalankan, mengesan ralat yang mungkin berlaku apabila ujian dihentikan dan isu lain. Sebagai contoh kod:
func BenchmarkAdd(b *testing.B) { for i := 0; i < b.N; i++ { Add(1, 2) } }Apabila program berjalan, hasil output adalah seperti berikut:
BenchmarkAdd-4 2000000000 0.29 ns/op PASS ok _/Users/test/main 1.028sdi mana,
"BenchmarkAdd" mewakili ujian penanda aras Nama
func TestPerfAdd(t *testing.T) { for i := 0; i < 100000; i++ { Add(1, 2) } }Antaranya, gelung ujian menjalankan fungsi 100,000 kali untuk menguji isu prestasinya apabila berjalan untuk masa yang lama. Sesuai untuk menguji prestasi program terhadap kebocoran memori, kebocoran pemegang fail atau kebocoran sumber lain. 4. Ujian sempadan Ujian sempadan digunakan untuk menguji sejauh mana kod mengendalikan keadaan sempadan, contohnya:
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) } }) } }Ujian sempadan boleh menyemak sama ada program memenuhi jangkaan apabila mengendalikan keadaan tepi , contohnya:
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!