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

王林
リリース: 2024-04-12 18:39:01
オリジナル
680 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!