Go 関数テストにおけるエラー処理戦略には、組み込みエラー パッケージを使用してエラーを作成および管理することが含まれます。エラー タイプをカスタマイズして、より具体的なエラー情報を提供します。アサート アサーションを使用してエラー状態を簡潔にチェックします。 Fatal と Skip を使用して、重大なエラーのテストを終了またはスキップします。

Go 関数テストにおけるエラー処理戦略
Go 関数テストでは、エラーを正しく処理することが信頼性を確保するために不可欠です。テストと堅牢性が重要です。いくつかの実践的な戦略を次に示します。
1. 組み込みの errors
パッケージを使用します。
Go の標準ライブラリには errors
が用意されています。エラーを作成および管理するためのメカニズムを提供するパッケージ。エラー値は error
インターフェイスを実装できるため、if
条件を簡単に使用してエラーを処理できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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)
}
|
ログイン後にコピー
2. カスタム エラー タイプ
場合によっては、組み込みエラーの代わりにカスタム エラー タイプを使用する方が適切です。これにより、より具体的で意味のあるエラー情報が提供されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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
アサーションが用意されています。エラー状態を確認するのに役立ちます。これらは、エラー チェック コードを記述するための簡潔な方法を提供します。
1 2 3 4 5 6 7 8 9 | 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)
}
|
ログイン後にコピー
4. Fatal
と Skip
重大なエラーが発生した場合、場合によっては、テストを終了する必要があります。 testing
パッケージは、この目的のために Fatal
および Skip
関数を提供します。
1 2 3 4 5 6 7 | func TestDivide(t *testing.T) {
result, err := Divide(10, 0)
if err != nil {
t.Fatal(err)
}
fmt.Println(result)
}
|
ログイン後にコピー
実際的なケース
エラーを処理する必要がある関数テストの例を考えてみましょう:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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 サイトの他の関連記事を参照してください。