ホームページ >バックエンド開発 >Golang >Golang 関数をテストして信頼性を確保するにはどうすればよいでしょうか?

Golang 関数をテストして信頼性を確保するにはどうすればよいでしょうか?

王林
王林オリジナル
2024-04-12 18:39:01698ブラウズ

Golang 関数の信頼性テストには、単体テスト (テスト パッケージを使用して単一の関数を単独でテストする)、テーブル駆動テスト (テスト テーブルを使用して複数の入力をテストする)、サブテスト (単一のテスト関数内でサブテストを作成する)、統合テストが含まれます。 、github.com/ory/dockertest などのライブラリを使用して、コードの統合動作をテストします。

Golang 関数をテストして信頼性を確保するにはどうすればよいでしょうか?

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)
        }
    }
}

テーブル駆動テスト

テーブル駆動テストでは、同じものを使用できます。 test 複数の入力を同時にテストする関数。これは、テスト ケースごとに個別のテスト テーブルを作成できることを意味します。

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)
    }
}

以上がGolang 関数をテストして信頼性を確保するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。