[Go言語]テストコードの書き方2~API編~

前回は、Go言語のテストの実行方法、カバレッジおよび統合テストについての概略、ベンチマークの実装・実行方法について解説しました。

今回は、APIのテストコードの書き方について、解説します。

Assertの導入

Go言語のtestingパッケージには、Assertが存在しません。

つまり、通常は以下のようにエラー判定を行います。

テストを実行します。

これでもOKなのですが、Pythonなど他の言語に触れてきた人たちにとっては何かが足りません。

そう、Assertionがないのです。

Go言語では、Assertionはデフォルトで組み込まれていないため、別途モジュールをインストールする必要があります。

今回は、「stretchr/testify」パッケージを利用します。

以下のパッケージをインストールしてください。

このパッケージを利用して、先ほどのテストを書き直してみましょう。

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

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

Passしました!

Rest API Test

以下のパッケージをインストールしてください。

本テストは、以下のAPIを利用します。

Country

また、以下のフォルダとファイルを作成してください。

まず、エラー格納用のStructを作成しましょう。

続いて、Country APIから取得した値を格納するためのStructを作成します。

続いて、CountryAPIから値を取得する関数を作成します。

正常に処理が走るか確かめてみましょう。

OKです。

では、テストを書いていきましょう。

最初は、API問い合わせテストです。このテストは、Wifiを切らないと(インターネット接続を切らないと)テストできません。

テストを実行してみます。

Use ‘mock’ flag to tell package rest that you would like to use mockups.」という想定外のエラーが出てしまいました。

これは、mercadolibre/golang-restclient既知のバグのようです。

暫定対処として、mercadolibre/golang-restclientの以下のファイルの処理をコメントアウトします。

もう一度テストを実行します。

テストが成功しました。

続いて、指定したCountryが存在しない場合のテストです。

次は、Countryを指定していなかった場合のテストです。

最後にCountryが正しく取得できるかテストします。

OKですね。

Mockテスト

続いて、Mockテストを行いましょう。

Mockは、外部機能をシミュレーションするためのテスト手法の一つです。

先ほどの「TestGetCountryRestclientError」関数のInitにMock処理を書きます。

StartMockupServer関数でMockを初期化し、その後、AddMockupsで、シミュレーションしたいパラメータ情報を渡します。

今回は、実際に存在するURL「https://api.mercadolibre.com/countries/AR」を渡していますが、開発の状況によっては呼び出し先のAPIが作られていないこともあります。

そんな時に、Mockを使えば擬似的なシミュレーションができるというわけです。

テストを実行します。

Passしましたね。思い出していただきたいのですが、このテストはWifiを切らないとテストできないものでしたが、Mockに置き換えたことでテスト可能になりました。

他の関数もMockに置き換えていきます。

全てのテストに「rest.StartMockupServer()」を入れてますが、TestMainに入れれば、他の言語のSetUp関数のようにテスト開始時に実行してくれるようになります。

また、それぞれのテストに次の処理を入れておきましょう。

FlushMockupsについてはの詳しい説明はありませんでしたが、以下の処理からそれぞれのテスト間で、Mockのロックを行うようです。

次回

今回は、Assertionの導入、REST APIのテスト、Mockテストについて解説しました。

次回はもっと包括的なテストを行います!

コメントを残す