Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menguji pakej dalam Go?

Bagaimana untuk menguji pakej dalam Go?

WBOY
WBOYasal
2024-06-01 11:50:56987semak imbas

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.

如何在 Go 语言中测试包?

Bagaimana untuk menguji pakej dalam bahasa Go?

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.

Ujian penulisan

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()
  • Berikut ialah contoh fungsi ujian:
rrreee🎜*ujian.T Parameter mewakili contoh ujian. Mesej ralat dilog menggunakan 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(). 🎜
  • Setiap ujian kecil memanggil fungsi 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!

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
Artikel sebelumnya:Golang framework berita terkiniArtikel seterusnya:Golang framework berita terkini