Go 関数テストにおけるエラー処理戦略には、組み込みエラー パッケージを使用してエラーを作成および管理することが含まれます。エラー タイプをカスタマイズして、より具体的なエラー情報を提供します。アサート アサーションを使用してエラー状態を簡潔にチェックします。 Fatal と Skip を使用して、重大なエラーのテストを終了またはスキップします。
Go 関数テストにおけるエラー処理戦略
Go 関数テストでは、エラーを正しく処理することが信頼性を確保するために不可欠です。テストと堅牢性が重要です。いくつかの実践的な戦略を次に示します。
1. 組み込みの errors
パッケージを使用します。
Go の標準ライブラリには errors
が用意されています。エラーを作成および管理するためのメカニズムを提供するパッケージ。エラー値は error
インターフェイスを実装できるため、if
条件を簡単に使用してエラーを処理できます。
import ( "fmt" "errors" ) func Divide(a, b int) (int, error) { if b == 0 { return 0, errors.New("division by zero") } return a / b, nil } func TestDivide(t *testing.T) { result, err := Divide(10, 2) if err != nil { t.Error(err) } fmt.Println(result) // 输出:5 }
2. カスタム エラー タイプ
場合によっては、組み込みエラーの代わりにカスタム エラー タイプを使用する方が適切です。これにより、より具体的で意味のあるエラー情報が提供されます。
type MyError struct { Message string } func (e MyError) Error() string { return e.Message } func SomeFunction() error { return MyError{Message: "an error occurred"} } func TestSomeFunction(t *testing.T) { err := SomeFunction() if err != nil { t.Errorf("an error occurred: %v", err) } }
3. assert
アサーションを使用します。
Go の testing
パッケージには assert
アサーションが用意されています。エラー状態を確認するのに役立ちます。これらは、エラー チェック コードを記述するための簡潔な方法を提供します。
import "testing" func TestDivide(t *testing.T) { result, err := Divide(10, 2) if err := assert.NoError(err); err != nil { t.Error(err) } fmt.Println(result) // 输出:5 }
4. Fatal
と Skip
重大なエラーが発生した場合、場合によっては、テストを終了する必要があります。 testing
パッケージは、この目的のために Fatal
および Skip
関数を提供します。
func TestDivide(t *testing.T) { result, err := Divide(10, 0) if err != nil { t.Fatal(err) } fmt.Println(result) // 输出:0 (不会执行) }
実際的なケース
エラーを処理する必要がある関数テストの例を考えてみましょう:
import ( "testing" "errors" ) func MyFunction(input string) (string, error) { if input == "" { return "", errors.New("input cannot be empty") } return input + " processed", nil } func TestMyFunction(t *testing.T) { testCases := []struct { input string expected string err error }{ {input: "abc", expected: "abc processed", err: nil}, {input: "", expected: "", err: errors.New("input cannot be empty")}, } for _, tc := range testCases { result, err := MyFunction(tc.input) if !errors.Is(err, tc.err) { t.Errorf("expected error %v, got %v", tc.err, err) } if result != tc.expected { t.Errorf("expected %v, got %v", tc.expected, result) } } }
この例では # を使用します。 # #testCases さまざまな入力シナリオをカバーするテーブル駆動のテスト。
errors.Is を使用して、実際のエラーと予想されるエラーを比較します。ここでも、
if 条件を使用してエラーを処理し、結果が期待どおりであることを確認します。
以上がGolang 関数テストにおけるエラー処理戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。