ホームページ  >  記事  >  バックエンド開発  >  Golang 単体テストでテーブル駆動テスト手法を使用するにはどうすればよいですか?

Golang 単体テストでテーブル駆動テスト手法を使用するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-01 09:48:57569ブラウズ

テーブル駆動テストは、入力と予想される出力をテーブルで定義することにより、Go 単体テストでのテスト ケースの作成を簡素化します。構文には次のものが含まれます。 1. テスト ケース構造を含むスライスを定義します。 2. スライスをループし、結果を予想される出力と比較します。 実際のケースでは、文字列を大文字に変換する関数に対してテーブル駆動テストが実行され、テストの実行と合格結果の出力には go test が使用されました。

如何在 Golang 单元测试中使用表驱动的测试方法?

Golang単体テストでテーブル駆動テスト手法を使用するにはどうすればよいですか?

テーブル駆動テスト は、テーブルを使用して複数の入力と期待される出力を定義するテスト方法です。これにより、テスト ケースごとに個別の関数を作成するのではなく、テーブル自体を定義するだけで済むため、テスト ケースを作成するプロセスが簡素化され、高速化されます。

構文

テーブル駆動テストの構文は次のとおりです:

import "testing"

func TestTableDriven(t *testing.T) {
    tests := []struct {
        input    string
        expected string
    }{
        {"a", "A"},
        {"b", "B"},
        {"c", "C"},
    }

    for _, test := range tests {
        result := UpperCase(test.input)
        if result != test.expected {
            t.Errorf("Expected %q, got %q", test.expected, result)
        }
    }
}
  • tests は、テスト対象の入力と予期される出力を定義する構造体スライスです。
  • tests 是一个结构体切片,它定义了要测试的输入和预期输出。
  • range tests 循环遍历 tests 切片中的每个测试用例。
  • result 是要测试的函数的输出。
  • if result != test.expected 检查结果是否与预期输出匹配。

实战案例

以下是一个将字符串转换为大写的函数的表驱动的测试:

import (
    "testing"
    "strings"
)

func TestUpperCase(t *testing.T) {
    tests := []struct {
        input    string
        expected string
    }{
        {"a", "A"},
        {"b", "B"},
        {"c", "C"},
    }

    for _, test := range tests {
        result := strings.ToUpper(test.input)
        if result != test.expected {
            t.Errorf("Expected %q, got %q", test.expected, result)
        }
    }
}

要运行测试,请使用 go testrange testing は、tests スライス内の各テスト ケースをループします。

result は、テストされる関数の出力です。

if result != test.expected 結果が予想される出力と一致するかどうかを確認します。

実践例🎜🎜これは、文字列を大文字に変換する関数のテーブル駆動テストです:🎜
go test -v
🎜テストを実行するには、go test を使用します:🎜
=== RUN   TestUpperCase
--- PASS: TestUpperCase (0.00s)
PASS
ok      github.com/user/pkg   0.005s
🎜これにより、次の出力が出力されます:🎜rrreee

以上がGolang 単体テストでテーブル駆動テスト手法を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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