この API を構築する中で、認証、ロギング、Dockerization などについて取り上げてきました。しかし、まだ話し合っていないことが 1 つあります。テストです。 API を運用環境に対応させたい場合は、確実な単体テストを追加することが重要です。この投稿では、バグを早期に発見して高品質のコードを出荷できるように、Go での単体テストの基本について説明します。
単体テストは、コードベースの各部分が期待どおりに動作することを検証するのに役立ちます。これらは、バグ、リグレッション、その他の予期せぬ事態に対する防御の最前線です。 Go の組み込みテスト ライブラリを使用すると、次のようなテストをすばやくセットアップできます。
始める準備はできましたか?飛び込んでみましょう! ?
Go のテスト フレームワークはシンプルで、言語に直接統合されています。 _test.go 接尾辞を付けて名前を付けることで、テスト ファイルを作成できます。まずは main.go:
の単純な関数をテストしてみましょう。
// main.go package main func Add(a, b int) int { return a b }
次に、main_test.go という名前のファイルを作成し、次のコードを追加します。
// main_test.go package main import "testing" func TestAdd(t *testing.T) { result := Add(2, 3) expected := 5 if result != expected { t.Errorf("Add(2, 3) = %d; want %d", result, expected) } }
テストを実行するには、次のようにしてください:
go test
すべてが正常に動作すると、OK メッセージが表示されます。 ?
それでは、HTTP ハンドラーの 1 つに対するテストを書いてみましょう。 Go の httptest パッケージを使用して、模擬 HTTP リクエストとレスポンス レコーダーを作成します。
// main_test.go package main import ( "net/http" "net/http/httptest" "testing" ) func TestGetBooksHandler(t *testing.T) { req, err := http.NewRequest("GET", "/books", nil) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() handler := http.HandlerFunc(getBooks) handler.ServeHTTP(rr, req) if status := rr.Code; status != http.StatusOK { t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) } }
この方法により、サーバー全体を起動することなく、ハンドラーを分離してテストできます。 ?
Go には、テスト カバレッジをチェックする方法が組み込まれています。コードの何パーセントがテストでカバーされているかを確認するには、次を実行できます:
go test -cover
さらに詳しい内容については、HTML レポートを生成してください:
go test -coverprofile=coverage.out go tool cover -html=coverage.out
生成された HTML ファイルを開いて、コードのどの部分がカバーされているかを視覚化します。これは、追加のテストが必要な場所を確認するための素晴らしい方法です。
外部サービス (データベースや外部 API 呼び出しなど) に依存する関数をテストする場合、インターフェイス を使用してそれらの依存関係を模擬できます。
// Define a simple interface for our database type Database interface { GetBooks() ([]Book, error) } // Implement a mock database type MockDatabase struct{} func (m MockDatabase) GetBooks() ([]Book, error) { return []Book{{Title: "Mock Book"}}, nil }
インターフェイスを使用すると、テスト中に実際の依存関係をモックに置き換えることができます。これにより、テストの高速化、分離性、再現性が維持されます。
単体テストの構築を開始したので、API の他の部分にテストを追加してみてください。 ?来週は、変更のたびにこれらのテストを自動的に実行できるように、CI/CD パイプラインの統合について説明します。乞うご期待!
あなたへの質問: お気に入りのテスト ツールまたは手法は何ですか?以下にコメントを入力してください。他の Go 開発者がテストにどのように取り組んでいるのかぜひ聞きたいです!
これらの基本を理解すれば、Go API の信頼性を高める確実なテストを作成できるようになります。テストのヒントや高度なテクニックの詳細については、今後の投稿にご期待ください。テストを楽しんでください。 ?
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3