[Go言語]ginフレームワークでアプリ開発~例外処理編~

前回は、Controllerとそのテストについて実装を行いました。本日も引き続き、実装を進めていきます。

前回

Error Structの作成

今回は、APIの例外処理を中心に実装を進めていきます。

最初に例外を格納できるStructを作成しましょう。

api_errors.goには、以下のStructを実装します。

products_controller.goのCreateProduct関数を修正します。

コンテナを立ち上げて、Talend API Tester上から以下のリクエストを送ってみましょう。

idは、uint型ではないといけませんが、文字列として送ってみます。

期待通りのエラーを返しました。ちなみに、CreateProduct関数にて、新たに「ShouldBindJSON関数」を使っています。

これは、前回実装した以下の処理を代替することができます。

エラーユーティリティ関数の実装

先ほど実装したBad Requestはうまくいきましたが、もう少し使い勝手がよくなるようにユーティリティ関数を追加してみましょう。

NewBadRequestErrorを追加しました。products_controller.goも書き換えます。

これで、文字列を渡すだけでBad Requestを生成できるようになりました。

テストコードの実装

最近のトレンドだと、テストコードが必須になってきてます。そのため、テストコードを描く練習をしましょう。

TestCreateProductNoErrorの修正

前回作成したproducts_controller_test.goの「TestCreateProductNoError」を修正します。

上記では、http.StatusOK(200)をhttp.StatusCreated(201)に修正しました。200や201は、リクエスト後に返却されるHTTPのステータスコードです。

テストを実行します。

Invalid json bodyのテスト

ここからが新規のテストです。

先ほど実装した「NewBadRequestError」エラーをテストしてみましょう。

要領は、TestCreateProductNoErrorとほぼ同じです。

Bad Requestが発生するようにリクエストパラメータのIDを文字列に変えてリクエストを生成し、CreateProductへ渡しています。

そして、戻り値として得られた値が、期待されたエラーかのテストをしています。

リファクタリング

テストコード内の重複部分を削除しようと思います。

だいぶスッキリしましたね。

テストを実行します。

次回

次回も引き続き、APIの実装を進めていきたいと思います。

コメントを残す