Heim >Backend-Entwicklung >Golang >Wie teste ich Pakete in Go?

Wie teste ich Pakete in Go?

WBOY
WBOYOriginal
2024-06-01 11:50:56987Durchsuche

Durch die Verwendung des integrierten Test-Frameworks der Go-Sprache können Entwickler problemlos Tests für ihren Code schreiben und ausführen. Die Testdatei endet mit _test.go und enthält Testfunktionen, die mit Test beginnen, wobei der Parameter *testing.T die Testinstanz darstellt. Fehlermeldungen werden mit t.Error() protokolliert. Tests können durch Ausführen des Befehls go test ausgeführt werden. Untertests ermöglichen die Zerlegung von Testfunktionen in kleinere Teile und die Erstellung über t.Run(). Ein praktisches Beispiel ist eine für die Funktion IsStringPalindrome() im Paket utils geschriebene Testdatei, die die Korrektheit der Funktion anhand einer Reihe von Eingabezeichenfolgen und der erwarteten Ausgabe testet.

如何在 Go 语言中测试包?

Wie teste ich Pakete in der Go-Sprache?

Die Go-Sprache bietet ein leistungsstarkes integriertes Test-Framework, mit dem Entwickler problemlos Tests für ihren Code schreiben und ausführen können. So verwenden Sie das Go-Testpaket zum Testen Ihres Programms.

Tests schreiben

In Go enden Testdateien mit _test.go und werden im selben Verzeichnis abgelegt wie das Paket, das Sie testen möchten. Testdateien enthalten eine oder mehrere Testfunktionen, die mit Test beginnen, gefolgt von der zu testenden Funktionalität. 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()
  • Das Folgende ist eine Beispieltestfunktion:
rrreee🎜*testing.T Die Parameter stellen die Testinstanz dar. Fehlermeldungen werden mit t.Error() protokolliert. 🎜🎜Tests ausführen🎜🎜Sie können Tests ausführen, indem Sie den folgenden Befehl ausführen: 🎜rrreee🎜Wenn der Test erfolgreich ist, wird eine Meldung wie „PASS“ angezeigt. Tritt ein Fehler auf, wird eine Fehlermeldung angezeigt. 🎜🎜Subtests verwenden🎜🎜Subtests ermöglichen das Aufteilen einer Testfunktion in kleinere Teile. Dies hilft, Testcode zu organisieren und die Lesbarkeit zu verbessern. 🎜🎜So schreiben Sie einen Untertest: 🎜rrreee🎜Praktischer Fall🎜🎜Angenommen, wir haben ein Paket mit dem Namen utils, das eine Funktion IsStringPalindrome() enthält, um zu prüfen, ob ein String vorhanden ist ist ein Palindrom. 🎜🎜So schreiben Sie eine Testdatei, um diese Funktion zu testen: 🎜rrreee🎜In dieser Testdatei: 🎜
  • tests Das Array definiert eine Reihe von Eingabezeichenfolgen und die erwartete Ausgabe. 🎜
  • for durchläuft das Array tests und erstellt Untertests mit t.Run(). 🎜
  • Jeder Untertest ruft die Funktion utils.IsStringPalindrome() auf und vergleicht seine Ergebnisse mit den erwarteten Ergebnissen. Wenn die Ergebnisse inkonsistent sind, wird t.Errorf() verwendet, um einen Fehler zu protokollieren. 🎜🎜

Das obige ist der detaillierte Inhalt vonWie teste ich Pakete in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn