golang 函數的可靠性測試涉及單元測試,使用 testing 包隔離測試單個函數;表驅動的測試,使用測試表測試多個輸入;子測試,在單個測試函數中創建子測試;集成測試,使用諸如 github.com/ory/dockertest 之類的庫測試代碼的集成行為。
如何測試 Golang 函數以確保其可靠性
在 Golang 中編寫可靠的函數對于構建健壯和穩定的應用程序至關重要。測試是確保函數符合預期行為的必要手段。本文將介紹如何測試 Golang 函數,并提供一個實用案例。
單元測試
單元測試是對單個函數或模塊進行隔離測試的技術。在 Golang 中,使用 testing 包進行單元測試:
package mypkg
import "testing"
func TestAdd(t *testing.T) {
tests := []struct {
a, b, expected int
}{
{1, 2, 3},
{3, 4, 7},
}
for _, tt := range tests {
actual := Add(tt.a, tt.b)
if actual != tt.expected {
t.Errorf("Add(%d, %d) = %d, expected %d", tt.a, tt.b, actual, tt.expected)
}
}
}
登錄后復制
表驅動的測試
表驅動的測試允許我們在使用相同測試函數的同時測試多個輸入。這意味著我們可以為每個測試用例創建單獨的測試表:
func TestAddTableDriven(t *testing.T) {
tests := []struct {
a, b, expected int
}{
{1, 2, 3},
{3, 4, 7},
}
for _, tt := range tests {
t.Run(fmt.Sprintf("TestAdd(%d, %d)", tt.a, tt.b), func(t *testing.T) {
actual := Add(tt.a, tt.b)
if actual != tt.expected {
t.Errorf("Add(%d, %d) = %d, expected %d", tt.a, tt.b, actual, tt.expected)
}
})
}
}
登錄后復制
子測試
子測試允許在單個測試函數中創建多個子測試。這有助于組織測試并提供更多詳細的錯誤消息:
func TestError(t *testing.T) {
t.Run("case 1", func(t *testing.T) {
err := Error(0)
if err != nil {
t.Errorf("Error(0) = %v", err)
}
})
t.Run("case 2", func(t *testing.T) {
err := Error(1)
if err == nil {
t.Error("Expected error for Error(1)")
}
})
}
登錄后復制
集成測試
集成測試測試代碼的集成行為,包括涉及多個函數的交互。在 Golang 中,可以使用 github.com/ory/dockertest 等庫進行集成測試:
package mypkg_test
import (
"context"
"fmt"
"io"
"testing"
"github.com/ory/dockertest"
)
func TestIntegration(t *testing.T) {
// 創建一個容器,在其中運行我們的代碼
container, err := dockertest.NewContainer("my-org/my-image", "latest", nil)
if err != nil {
t.Fatal(err)
}
// 在容器中執行我們的代碼
output, err := container.Run(context.Background())
if err != nil {
t.Fatal(err)
}
// 檢查輸出以驗證行為
if _, err := io.WriteString(output, "Hello World\n"); err != nil {
t.Fatal(err)
}
fmt.Fprintln(output, "Done")
// 等待容器退出
if err := container.Wait(); err != nil {
t.Fatal(err)
}
}
登錄后復制






