kaedah ujian ujian golang

WBOY
Lepaskan: 2023-05-13 12:16:07
asal
1616 orang telah melayarinya

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
}
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

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
Salin selepas log masuk

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:

  • TestXxx, BenchmarkXxx, ExampleXxx apabila menjalankan contoh dalam pelayar Jalankan fungsi yang sepadan, gunakan Hanya kaedah ujian ini akan dijalankan dalam arahan ujian. Contohnya: TestParseShort()
  • TestXxxParallel boleh dijalankan secara selari dan t.Parallel() boleh digunakan untuk meningkatkan kecekapan dalam ujian. Contohnya: TestFooParallel()
  • 3 Matlamat dan pelaksanaan kes ujian

Melalui ujian unit, kualiti dan ketepatan kod Golang boleh disahkan, termasuk:

<. 🎜>

Sama ada fungsi mengembalikan hasil yang dijangkakan

    Sama ada ia mematuhi logik pemprosesan masa jalan
  • Sama ada ia boleh mengendalikan situasi yang tidak dijangka
  • Sebagai contoh kod:
  • // Add 两个整数x和y
    func Add(x, y int) int {
        return x + y
    }
    Salin selepas log masuk
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)
        }
    }
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

Apabila program berjalan, hasil output adalah seperti berikut:

BenchmarkAdd-4        2000000000             0.29 ns/op
PASS
ok      _/Users/test/main    1.028s
Salin selepas log masuk

di mana,

"BenchmarkAdd" mewakili ujian penanda aras Nama

    “4” menunjukkan bilangan goroutine yang dilaksanakan selari oleh fungsi ujian
  • “2000000000” menunjukkan jumlah bilangan lelaran yang dilaksanakan oleh ujian.B.Run, dan pengimbangan penyesuaian dalaman setiap lelaran dalam bahasa Go Bilangan kali
  • “0.29 ns/op” bermakna purata masa yang diperlukan untuk setiap lelaran ialah 0.29 nanosaat.
  • 3. Ujian prestasi
Ujian prestasi digunakan untuk menguji prestasi program semasa operasi jangka panjang. Contohnya:

func TestPerfAdd(t *testing.T) {
    for i := 0; i < 100000; i++ {
        Add(1, 2)
    }
}
Salin selepas log masuk

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)
            }
        })
    }
}
Salin selepas log masuk
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)

    Biar program berada dalam pemprosesan terpantas atau paling lambat. situasi (seperti Saiz data ialah 0 atau maksimum)
  • Tetapkan had atas dan bawah untuk pelbagai parameter fungsi dan uji tindak balas fungsi
  • Ringkasan
  • 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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan