[Go言語]FiberでWebアプリケーションを実装しよう~HTTP UnitTest~

こんにちは。KOUKIです。

とあるWeb系企業でエンジニアをやってます。

前回、Go言語のWebフレームワークであるFiberとORMラッパーであるGORMを使って簡単なCRUDアプリを実装しました。

その過程で、以下のエンドポイントを作成しました。

本記事では、上記のエンドポイントに向けてUnitTestする方法を考えてみました。

UnitTestは、プログラミング開発する上で避けては通れないものなので、必見です!

事前準備

main.goと同じディレクトリ上に、下記のファイルを作成しましょう。
また、assertパッケージも追加します。

Go言語では、xxxx_test.goファイルにテストコードを実装します。

UnitTest ~HTTP リクエスト~

HTTP リクエストのUnitTestを実装していきましょう。

事前準備

Go言語では、Test_XXXXから始まる命名規則でテストコードを実装しなければなりません。

また、その引数には「testing」パッケージを指定します。

テストを実行するには、「go test」コマンドを使います。
※「-v」オプションにてテストの詳細を表示

続いて、テストに必要なFiber App、データベース、ルーター、テストデータの準備をします。

POST Test

以下の順でテストをしたいと思います。

  1. POST リクエスト — データが保存されるか
  2. GET リクエスト — データが取得できるか
  3. DELETE リクエスト — データが削除されるか

そんなわけで、最初はPOSTリクエストのテストです。

Test_BOOK_HTTP_REQUEST関数に、下記のコードを追加してください。

httpパッケージのNewRequestメソッドで、HTTPリクエストを作成してます。

この時忘れがちなのが、Headerの“Content-Type”, “application/json”」です。
JSON形式でリクエストを送信しないとFiberのBodyParser処理で「Unprocessable Entity」エラーが発生します。

そして、FiberのAppに組み込まれているTestメソッドで、HTTPリクエストを送信します。

テストを実行しましょう。

Greatですね、こいつは!

Get Test

同じ要領で、Getリクエストもテストします。

Getは、URLに渡されたIDをKeyに一意のBookを取得するものと全てのBookを取得するものとの2つのエンドポイントがあるので、上記のように実装しました。

テストを実行します。

OKですね。

DELETE Test

最後に、DELETEのテストです。

DELETEの場合は、一度データを削除してからGETリクエストを送ってデータが消えているか確認してみました。

OKですね。

リファクタリング

最後にリファクタリングをしてみましょうか。

現状は、以下のようになっています。

ヘルパー関数

チェック処理が重複しているので、ヘルパー関数を実装しましょう。

重複処理を削除するだけで、だいぶスッキリしましたね^^

t.Run

testingパッケージのRunメソッドを使って、テストをグルーピングすることもできます。

こちらの方がわかりやすいかもしれませんね。

Test Driven Tests

更に発展させると…

こんな感じで実装することもできました。TestCase Structにテストケースのパラメーターを追加していくイメージですね。

おわりに

いかがだったでしょうか。

意外にFiberのテスト記事がないので、この記事がお役に立てば幸いです(@_@)

Go言語でのテストコードの書き方は次の記事が参考になると思いますので、良かったら一読してください。

Go言語まとめ

まとめ記事


コメントを残す