[Golang]APIのHTTPテスト方法を学んで品質の良いコードを書こう!

こんにちは。KOUKIです。

とあるWeb系企業でGoエンジニアをしています。

Golangを採用する理由の一つが、とても早いAPIを実装できることにあります。

しかし、テストが意外に難しいので、今回はAPIのテストについて記述したいと思います。

Webフレームワークは、大人気のginを使いましょう。

事前準備

APIの実装

簡単なAPIを実装します。

「http://localhost:8080/」にアクセスすると{“message”: “hello world”}を返します。

terminalを用意していただき、下記のコマンドでAPIを起動しましょう。

確認のために、別のterminalでCURLを打ってみます。

OKですね。

APIのテスト

続いて、APIのテストコードを実装します。

httptestパッケージのNewServer関数で、テスト用のサーバーを起動することができます。

上記では、「http://localhost:8080/」にリクエストを送信し、{“message”: “hello world”}が返却されるかテストしています。

下記のコマンドで、テストを実行してみましょう。

「ok」が返却されたので、テストは成功です^^

testifyを使う

テストは成功しましたが、少しコードが読みにくいですよね。

サードパーティモジュールのtestifyで、テストコードを読みやすくしましょう。

だいぶ読みやすくなりましたね。テストを実行すると先ほどと同様の結果が得られます。

Routerの設定

Ginのrouterを設定して、テストする方法もあります。

APIの更新

main.goのAPIをupgradeします。

テスト

テストコードを実装します。

httpパッケージのGETからGin RouterのGETに変更しました。こっちの方がとっつきやすさがありますよね。Webフレームワークを使うメリットの一つです^^

POSTのテスト

これまでは、GETのテストを見てきましたが、POSTのテストも確認しましょう。

APIの更新

POSTハンドラーを追加します。

新しく追加したAddMovieHandlerは、以下のように使います。

テストの追加

POSTの場合は、JSONデータを先に作ってリクエストと共に渡すようですね。

カバレッジを出す方法

次のコマンドで、テストカバレッジファイルを出力することができます。

ファイルの中身は下記のようになっています。

このままじゃよくわからないと思うので、HTMLとして画面に表示させましょう。

上記のコマンドを実行すると、ブラウザが自動で立ち上がります。

テストでカバーされている箇所は緑、されていない箇所は赤ですね。この赤の部分をなるべく少なくできるとカバレッジが上がるのだと思います。

まとめ

簡単でしたが、以上です。

httptestパッケージのNewServer関数を使えばテスト用のサーバーを起動でき、実装したAPIへリクエストを送信する処理を実装し、testifyで結果の評価を行う。

APIのテストはこのような流れになると思います。この基本的な流れを組めば、あとは応用でなんとかなります。

テストコードをたくさん書いて、慣れていきましょう^^

それでは、また!

Go記事まとめ

Go記事まとめです

ソースコード

コメントを残す