[Go言語]ginフレームワークでアプリ開発~Controllerのテスト編~

学習履歴

前回は、Ginフレームワークに慣れるために、簡単なAPIを作成しました。

今回は、ginのControllerの実装とそのテストを行います。

前回

プロジェクト構成

商品 structの構築

購入商品を表すProduct Structを作成します。domain/products/product.goに以下を追加しましょう。

APIを実装しているので、データ形式はJSONにしました。

json:"***"は、リクエスト元のパラメータを指定しています。

例えば、以下のように指定できます。

次に、product.controller.goを修正します。

ginでは、ユーザーリクエストの情報がcontext(c)に入るため、c.Request.Bodyで取り出します。この時、ioutilパッケージのReadAllを使います。

その後、json.Unmarshalを使ってJSON構造を先ほど作った商品Structの形式にUnmarshalします。

docker-compose upでコンテナを立ち上げた後、Talend API Testerで動作確認をしてみましょう。

ひとまず、動作はしてますね。この情報は後ほど、MySQLに登録するつもりです。

Controllerのテスト

せっかくなので、controllerのテストを書いてみましょう。

以下の記事を参考にしてください。

controllers/products配下に「products_controller.go」ファイルを作成します。

Arrangeでは、最初に送信データを用意しました。json.Marshal関数をを利用することで、GoのStructをjsonのbyteにデコードできます。

その後、レスポンスを記録するために「http.NewRecorder」でレスポンスを作成し、GinのCreateTestContextの引数として渡します。CreateTestContextにて、contextが作成できるようですね。

その後、contextのRequestパラメータに「送信形式」,「送信先URL」,「jsonデータ(byte)」をそれぞれ渡しています。

Actでは、テストしたい関数を使って、実際に処理を呼び出しています。

最後に、Assertでレスポンスのチェックを行なっています。ステータスコード200が返却されたか、errは発生していないか、戻り値は想定ないか、などの確認をしました。

テストを実行してみましょう。※apiコンテナは起動した状態でテストしてください。

テストがPassしました!

CreateProduct Controllerはまだ未完成ですが、区切りがいいので今回はここまでにしましょう。

次回

次回は、例外処理の実装を行います。

コメントを残す