Go言語のテストで外部サービスをモックする方法
生徒
「Go言語で外部サービスに依存する処理をテストしたいのですが、安全にテストする方法はありますか?」
先生
「はい、外部サービスを直接呼ぶのではなく、モックを使って擬似的にサービスを再現する方法があります。」
生徒
「モックって何ですか?」
先生
「モックとは、実際のサービスの代わりに使うテスト用の偽物のオブジェクトです。これを使うとネットワークにアクセスせずに安全にテストできます。」
生徒
「具体的にはどのように作るんですか?」
先生
「Go言語では、interfaceを定義して、そのinterfaceを実装したモックを作ります。それでは例を見てみましょう。」
1. interfaceを使ったモックの基本
まず、外部サービスの機能をinterfaceで定義します。interfaceとは、構造体や関数に「この機能は必ず持つ」という契約を示すものです。
type WeatherService interface {
GetTemperature(city string) (int, error)
}
この例では、都市名を受け取って気温を返すサービスを想定しています。
2. モックの作り方
次に、テスト用のモックを作ります。モックはinterfaceを満たす構造体を作り、任意の値を返すように実装します。
type MockWeatherService struct{}
func (m MockWeatherService) GetTemperature(city string) (int, error) {
if city == "Tokyo" {
return 25, nil
}
return 20, nil
}
これで東京の場合は25度、それ以外は20度を返すモックが作れました。
3. モックを使ったテスト例
作成したモックをテストで利用します。テストコードでは、実際の外部サービスの代わりにモックを渡します。
func TestGetTemperature(t *testing.T) {
service := MockWeatherService{}
temp, _ := service.GetTemperature("Tokyo")
if temp != 25 {
t.Errorf("expected 25, got %d", temp)
}
temp, _ = service.GetTemperature("Osaka")
if temp != 20 {
t.Errorf("expected 20, got %d", temp)
}
}
このように、モックを使うことでネットワークにアクセスせずに安全にテストできます。
4. モック活用のポイント
モックを使うとテストが速く、安全に行えます。ポイントは以下の通りです。
- interfaceで機能を定義しておくと、モックと実装の差し替えが簡単です。
- 外部サービスの状態に依存せず、常に同じ結果を返すモックを作るとテストの安定性が向上します。
- 異常系のテストもモックで簡単に再現できます。
5. 初心者向けの実践方法
最初は小さなモックから始め、慣れてきたら複雑なサービスもモック化してみましょう。テストデータや返却値を外部ファイルにまとめると、さらに管理がしやすくなります。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!