Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengenalan yang mendalam tentang penggunaan ujian Golang

Pengenalan yang mendalam tentang penggunaan ujian Golang

PHPz
PHPzasal
2023-04-11 09:13:591610semak imbas

Golang ialah bahasa pengaturcaraan moden dengan banyak ciri menarik, seperti kecekapan, kesederhanaan dan sokongan serentak yang berkuasa. Alat ujian Golang juga sangat berkuasa Artikel ini akan memperkenalkan penggunaan ujian Golang secara mendalam.

Di Golang, kod ujian diasingkan daripada kod yang sedang diuji. Ini adalah untuk mengelakkan kod ujian mengelirukan dengan kod pengeluaran, dan untuk menjadikan kod ujian lebih mudah ditulis dan diselenggara. Kod ujian diletakkan dalam fail berasingan, berakhir dengan _test.go, yang bermaksud kod ujian boleh menggunakan dan mengakses segala-galanya daripada kod pengeluaran, tetapi kod pengeluaran tidak boleh menggunakan apa-apa daripada kod ujian.

Di Golang, ujian datang dalam dua bentuk: ujian unit dan ujian integrasi. Ujian unit digunakan untuk menguji fungsi atau kaedah, manakala ujian integrasi digunakan untuk menguji interaksi yang betul antara berbilang komponen sistem.

Pertama, mari kita lihat penggunaan ujian unit. Berikut ialah kod ujian untuk fungsi penambahan ringkas:

package main

import "testing"

func TestAdd(t *testing.T) {
    input1 := 1
    input2 := 2
    expected := 3
    result := Add(input1, input2)
    if result != expected {
        t.Errorf("Add(%d, %d) = %d; want %d", input1, input2, result, expected)
    }
}

Fungsi ujian perlu bermula dengan Ujian, diikuti dengan nama fungsi ujian. Parameter fungsi ujian ialah t *testing.T, yang boleh digunakan untuk menyemak sama ada fungsi ujian lulus atau gagal. Dalam contoh ini, fungsi ujian menyemak bahawa fungsi Tambah mengira jumlah 1 dan 2 dengan betul, dan mencetak mesej ralat jika hasilnya bukan 3.

Apabila arahan go test dilaksanakan, fungsi TestAdd akan dilaksanakan secara automatik dan hasilnya akan dikeluarkan. Jika fungsi berjaya melepasi ujian, tidak akan ada output, jika tidak mesej ralat akan dikeluarkan, seperti yang ditunjukkan di bawah:

--- FAIL: TestAdd (0.00s)
    main_test.go:10: Add(1, 2) = 4; want 3

Seterusnya, mari lihat penggunaan ujian integrasi. Berikut ialah kod ujian untuk aplikasi web mudah:

package main

import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestIndexHandler(t *testing.T) {
    req, err := http.NewRequest("GET", "/", nil)
    if err != nil {
        t.Fatal(err)
    }

    rr := httptest.NewRecorder()
    handler := http.HandlerFunc(IndexHandler)

    handler.ServeHTTP(rr, req)

    if rr.Code != http.StatusOK {
        t.Errorf("handler returned wrong status code: got %v want %v",
            rr.Code, http.StatusOK)
    }

    expected := "Hello, world!"
    if rr.Body.String() != expected {
        t.Errorf("handler returned unexpected body: got %v want %v",
            rr.Body.String(), expected)
    }
}

Dalam contoh ini, kami mencipta permintaan HTTP dan menggunakan fungsi httptest.NewRecorder() untuk mencipta perakam respons. Kami kemudiannya menggunakan fungsi http.HandlerFunc untuk mencipta pengendali dan menghantar pembalak permintaan dan tindak balas kepadanya. Akhir sekali, kami menyemak sama ada kod status respons dan kandungan kandungan adalah betul.

Apabila arahan go test dilaksanakan, kod ujian akan memulakan aplikasi web kami dan melaksanakan ujian. Jika ujian lulus dengan jayanya, tidak akan ada output, jika tidak mesej ralat akan dikeluarkan.

Untuk meringkaskan, alatan ujian Golang sangat berkuasa dan mudah digunakan. Mereka membantu kami menulis perisian yang boleh dipercayai dan memudahkan untuk mengekalkan dan mengemas kini kod ujian kami. Sama ada ujian unit atau ujian integrasi, alat ujian Golang menyediakan cara yang mudah dan berkesan untuk memastikan ketepatan kod, jadi kita harus sering menggunakannya semasa menulis kod Golang.

Atas ialah kandungan terperinci Pengenalan yang mendalam tentang penggunaan ujian Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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