Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan perpustakaan standard Go untuk ujian unit

Cara menggunakan perpustakaan standard Go untuk ujian unit

王林
王林asal
2024-04-30 18:39:02327semak imbas

Pustaka standard Go menyediakan fungsi ujian unit melalui pakej ujian, cuma buat fail _test.go dan tulis fungsi ujian. Fungsi ujian menggunakan fungsi penegasan, seperti AssertEqual dan AssertTrue, untuk membandingkan hasil yang dijangka dan sebenar. Maklumat tentang sama ada ujian lulus atau gagal akan dipaparkan dengan arahan go test.

如何使用 Go 标准库进行单元测试

Cara menggunakan perpustakaan standard Go untuk ujian unit

Pustaka standard Go menyediakan pakej ujian, yang menyediakan kefungsian yang kaya untuk menulis dan menjalankan ujian unit. Artikel ini akan membimbing anda tentang cara menggunakan pakej testing untuk menguji kod Go anda. testing 包,它提供了丰富的功能,用于编写和运行单元测试。本文将指导你如何使用 testing 包来测试你的 Go 代码。

设置单元测试

要为 Go 程序设置单元测试,请按照以下步骤操作:

  1. 在项目的根目录中创建一个名为 your_package_name_test.go 的文件。
  2. 导入 testing 包:
import "testing"

编写测试函数

每个单元测试都作为一个独立的函数编写,名为 func TestX(t *testing.T)。其中 X 是测试案例的名称,而 t 是一个 *testing.T 类型的指针,它提供了用于执行测试、报告结果和记录错误的方法。

func TestPassingTest(t *testing.T) {
    // 测试用例的代码...
}

断言

testing 包提供了多种断言函数来比较测试结果和预期值。常用的断言函数包括:

  • AssertEqual(t, expected, actual):检查 expectedactual 是否相等
  • AssertNotEqual(t, value1, value2):检查 value1value2 是否不相等
  • AssertTrue(t, condition):断言条件 condition 为真
  • AssertFalse(t, condition):断言条件 condition 为假

实战案例

让我们为一个计算两个数字之和的函数编写一个单元测试。

package my_package

import (
    "testing"
)

func Sum(a, b int) int {
    return a + b
}

单元测试

import (
    "testing"

    "my_package"
)

func TestSum(t *testing.T) {
    tests := []struct {
        a        int
        b        int
        expected int
    }{
        {1, 2, 3},
        {5, 7, 12},
    }

    for _, tc := range tests {
        result := my_package.Sum(tc.a, tc.b)
        if result != tc.expected {
            t.Errorf("Sum(%d, %d) returned %d, expected %d", tc.a, tc.b, result, tc.expected)
        }
    }
}

在单元测试中,我们创建了一个 []struct 类型的测试用例列表,其中包含输入值和预期的输出。我们使用循环遍历测试用例,并针对每个用例使用 AssertEqual 断言来验证计算的结果与预期结果是否一致。

运行单元测试

要运行单元测试,可以在命令行中运行以下命令:

go test

它将在项目目录及其子目录中查找所有 _test.go

Sediakan ujian unit

Untuk menyediakan ujian unit untuk program Go anda, ikuti langkah berikut: 🎜
  1. Buat fail bernama your_package_name_test.go anda.
  2. Import pakej ujian:
rrreee

Fungsi ujian tulis

🎜Setiap ujian unit ditulis sebagai fungsi bebas, Ia dipanggil func TestX(t *testing.T). Di mana X ialah nama kes ujian dan t ialah penunjuk jenis *testing.T, yang menyediakan fungsi untuk melaksanakan ujian dan pelaporan Keputusan dan kaedah merekod ralat. 🎜rrreee

Penegasan

🎜Pakej pengujian menyediakan pelbagai fungsi penegasan untuk membandingkan keputusan ujian dengan nilai yang dijangkakan. Fungsi penegasan yang biasa digunakan termasuk: 🎜
  • AssertEqual(t, expected, actual): Semak sama ada expected dan actual adalah sama
  • AssertNotEqual(t, value1, value2): Semak sama ada value1 dan value2 tidak sama
  • AssertTrue(t, condition): Tegaskan bahawa syarat condition adalah benar
  • AssertFalse(t, condition) : Tegaskan syaratcondition adalah palsu

Kes Praktikal

🎜Mari kita tulis ujian unit untuk fungsi yang mengira jumlah dua nombor. 🎜rrreee🎜Ujian Unit🎜rrreee🎜Dalam ujian unit, kami mencipta senarai kes ujian jenis []struct yang mengandungi nilai input dan output yang dijangkakan. Kami menggunakan gelung untuk mengulangi kes ujian dan menggunakan pernyataan AssertEqual untuk setiap kes untuk mengesahkan bahawa keputusan yang dikira adalah konsisten dengan keputusan yang dijangkakan. 🎜

Jalankan ujian unit

🎜Untuk menjalankan ujian unit, anda boleh menjalankan arahan berikut dalam baris arahan: 🎜rrreee🎜Ia akan mencari semua _test.godalam direktori projek dan subdirektorinya > fail dan jalankan ujian di dalamnya. Ujian yang berjalan dengan jayanya akan memaparkan mesej pas hijau, manakala ujian yang gagal akan memaparkan mesej ralat merah. 🎜

Atas ialah kandungan terperinci Cara menggunakan perpustakaan standard Go untuk ujian unit. 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