ホームページ  >  記事  >  バックエンド開発  >  go test を使用してテストケースの謎を探る

go test を使用してテストケースの謎を探る

王林
王林オリジナル
2024-04-07 14:21:01517ブラウズ

Go の go test コマンドは、以下を含む柔軟なテスト ケース メカニズムを提供します: 命名規則: Test5a28c055a5947396d43822ba1e9f283e、パラメーターは *testing.T アサーション: 期待値と実際の値が一致しているかどうかを検証します。 t.Equal() および t.Error() サブテスト: 大きなテスト ケースを小さな部分に分割し、t.Run() を使用してテーブル テストを作成します: 表形式のデータでテスト ケースを実行し、t.RunTable() を使用して実用的なケースを作成します。 go test を使用したデモ Web サービスのテスト

利用 go test 探索测试用例的奥秘

Go Test でテスト ケースの謎を探る

Go では、go test を使用したテスト コマンドはコードの正確さと信頼性を保証します。そのパワーは、柔軟で拡張可能なテスト ケース メカニズムから得られます。

テスト ケースの基本構文

テスト ケース関数の命名規則は、Test の形式に従います。各テスト ケース関数には、テスト ステータスやその他の情報を報告する #**testing.T 型パラメーターが必要です。

import "testing"

func TestAdd(t *testing.T) {
    // ... 测试代码
}

Assertion

Assertion は、期待値と実際の値が一致しているかどうかを検証するために使用される関数です。 Go のテスト パッケージには、次のようないくつかのアサーション関数が用意されています。

  • t.Equal(a, b): a が b
  • と等しいことを確認します。 t .NotEqual(a, b): a が b
  • と等しくないことを確認します。t.True(x): x が true であることを確認します
  • t.False (x): x が false であることを確認します
  • t.Error(err): err が nil ではないことを確認します
  • #Subtest

サブテストを使用すると、大規模なテスト ケースを、より小さく管理しやすい部分に分割できます。

t.Run()

関数を使用してサブテストを作成し、サブテスト名とテスト関数を渡します。 <pre class='brush:go;toolbar:false;'>func TestMath(t *testing.T) { t.Run(&quot;add&quot;, func(t *testing.T) { // 测试加法的子测试 }) t.Run(&quot;subtract&quot;, func(t *testing.T) { // 测试减法的子测试 }) }</pre>表形式テスト

表形式テストでは、表形式のデータを使用して一連のテスト ケースを実行できます。

t.RunTable()

関数を使用してテーブル テストを作成し、テーブル データとテスト関数を渡します。 <pre class='brush:go;toolbar:false;'>func TestTable(t *testing.T) { type Input struct { a, b int } tests := []Input{ {1, 2}, {3, 4}, {5, 6}, } t.RunTable(&quot;add&quot;, func(t *testing.T, in Input) { // 测试 add 函数,使用 in.a 和 in.b }, tests) }</pre>実践的なケース: Web サービスのテスト

次に、

go test

を使用して Web サービスをテストする例を示します: <pre class='brush:go;toolbar:false;'>import ( &quot;net/http&quot; &quot;net/http/httptest&quot; &quot;testing&quot; ) func TestGetProducts(t *testing.T) { // 创建一个模拟 HTTP 请求 req, err := http.NewRequest(&quot;GET&quot;, &quot;/api/products&quot;, nil) if err != nil { t.Fatal(err) } // 创建一个响应记录器 rr := httptest.NewRecorder() // 调用正在测试的处理程序 http.HandlerFunc(&quot;/api/products&quot;, getProducts).ServeHTTP(rr, req) // 验证响应的状态码 if status := rr.Code; status != http.StatusOK { t.Errorf(&quot;错误的状态码:%d&quot;, status) } // 验证响应 body expected := `{&quot;products&quot;: [{&quot;id&quot;: 1, &quot;name&quot;: &quot;Product 1&quot;}, {&quot;id&quot;: 2, &quot;name&quot;: &quot;Product 2&quot;}]}` if body := rr.Body.String(); body != expected { t.Errorf(&quot;错误的响应 body:%s&quot;, body) } }</pre>結論

go test

は、さまざまなテスト ケースを作成および管理できる強力なツールです。アサーション、サブテスト、テーブル テストの機能を最大限に活用して、包括的で信頼性の高いテストを作成し、コードの品質と信頼性を向上させることができます。

以上がgo test を使用してテストケースの謎を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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