ホームページ バックエンド開発 Golang golang 関数のエラー処理での単体テスト

golang 関数のエラー処理での単体テスト

May 01, 2024 pm 04:36 PM
golang 単体テスト エラー処理

単体テスト Go 言語での関数エラー処理方法には次のものがあります。 シミュレートされた入力の作成: エラーが制御されたシミュレートされたオブジェクトを作成します。エラー メッセージをアサートする: 返されたエラー メッセージを予期されるメッセージと一致させます。エラー状態をカバーする: 考えられるすべてのエラー状態に対するテスト ケースを作成します。

golang 関数のエラー処理での単体テスト

Go 言語関数エラー処理での単体テスト

バックグラウンド

In In Go 言語では、関数内のエラーは error 型の値をチェックすることで処理されます。正しいエラー処理を保証するには、単体テストを実行することが重要です。

単体テスト戦略

次の戦略は、関数内のエラー処理を単体テストする場合に非常に効果的です。

  • Create Mock as input: 制御されたエラーを返すモック オブジェクト (ファイル システムまたはネットワーク呼び出しのシミュレートなど) を作成します。
  • アサート エラー メッセージ: assert.Equal() などのアサーション ライブラリを使用して、返されたエラー メッセージが予想されるエラー メッセージと一致することを確認します。
  • エラー状態のカバー: 考えられるすべてのエラー状態に対するテスト ケースを作成します。これにより、エラー処理ロジックがあらゆるケースで期待どおりに動作することが保証されます。

実際的なケース

2 つの数値の合計を計算する次の関数を考えてみましょう:

func Sum(a, b int) (int, error) {
    if a < 0 || b < 0 {
        return 0, errors.New("non-negative integers only")
    }
    return a + b, nil
}
ログイン後にコピー

単体テスト

import (
    "errors"
    "testing"
)

func TestSum(t *testing.T) {
    tests := []struct {
        a, b int
        expected int
        err error
    }{
        {a: 1, b: 2, expected: 3, err: nil},
        {a: -1, b: 2, expected: 0, err: errors.New("non-negative integers only")},
    }

    for _, tt := range tests {
        t.Run("test", func(t *testing.T) {
            sum, err := Sum(tt.a, tt.b)
            if sum != tt.expected {
                t.Errorf("Expected %d, got %d", tt.expected, sum)
            }
            if !errors.Is(err, tt.err) {
                t.Errorf("Expected error %q, got %q", tt.err, err)
            }
        })
    }
}
ログイン後にコピー

結論

Go での関数エラー処理は、シミュレートされた入力、エラー メッセージ アサーション、および徹底的なテスト ケース カバレッジを使用して効果的にテストできます。これは、コードの堅牢性と信頼性を確保するのに役立ちます。

以上がgolang 関数のエラー処理での単体テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Jun 06, 2024 am 11:21 AM

Golang データベース接続用の接続プールを構成するにはどうすればよいですか?

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Jun 06, 2024 pm 05:14 PM

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか?

Golang と C++ の類似点と相違点 Golang と C++ の類似点と相違点 Jun 05, 2024 pm 06:12 PM

Golang と C++ の類似点と相違点

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Jun 05, 2024 pm 06:59 PM

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか?

golangフレームワークの長所と短所の比較 golangフレームワークの長所と短所の比較 Jun 05, 2024 pm 09:32 PM

golangフレームワークの長所と短所の比較

Golang 単体テストのアサーションに gomega を使用するにはどうすればよいですか? Golang 単体テストのアサーションに gomega を使用するにはどうすればよいですか? Jun 05, 2024 pm 10:48 PM

Golang 単体テストのアサーションに gomega を使用するにはどうすればよいですか?

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Jun 05, 2024 pm 10:39 PM

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか?

golang フレームワーク ドキュメントの使用手順 golang フレームワーク ドキュメントの使用手順 Jun 05, 2024 pm 06:04 PM

golang フレームワーク ドキュメントの使用手順

See all articles