カテゴリ: Go言語 更新日: 2026/01/10

Go言語のテストで外部サービスをモックする方法

Go言語のテストで外部サービスをモックする方法
Go言語のテストで外部サービスをモックする方法

先生と生徒の会話形式で理解しよう

生徒

「Go言語で外部サービスに依存する処理をテストしたいのですが、安全にテストする方法はありますか?」

先生

「はい、外部サービスを直接呼ぶのではなく、モックを使って擬似的にサービスを再現する方法があります。」

生徒

「モックって何ですか?」

先生

「モックとは、実際のサービスの代わりに使うテスト用の偽物のオブジェクトです。これを使うとネットワークにアクセスせずに安全にテストできます。」

生徒

「具体的にはどのように作るんですか?」

先生

「Go言語では、interfaceを定義して、そのinterfaceを実装したモックを作ります。それでは例を見てみましょう。」

1. interfaceを使ったモックの基本

1. interfaceを使ったモックの基本
1. interfaceを使ったモックの基本

まず、外部サービスの機能をinterfaceで定義します。interfaceとは、構造体や関数に「この機能は必ず持つ」という契約を示すものです。


type WeatherService interface {
    GetTemperature(city string) (int, error)
}

この例では、都市名を受け取って気温を返すサービスを想定しています。

2. モックの作り方

2. モックの作り方
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. モックを使ったテスト例

3. モックを使ったテスト例
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. モック活用のポイント

4. モック活用のポイント
4. モック活用のポイント

モックを使うとテストが速く、安全に行えます。ポイントは以下の通りです。

  • interfaceで機能を定義しておくと、モックと実装の差し替えが簡単です。
  • 外部サービスの状態に依存せず、常に同じ結果を返すモックを作るとテストの安定性が向上します。
  • 異常系のテストもモックで簡単に再現できます。

5. 初心者向けの実践方法

5. 初心者向けの実践方法
5. 初心者向けの実践方法

最初は小さなモックから始め、慣れてきたら複雑なサービスもモック化してみましょう。テストデータや返却値を外部ファイルにまとめると、さらに管理がしやすくなります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの構文ルールまとめ!インデント・セミコロンなど初心者が最初に覚えるべきポイント
New2
Kotlin
Kotlinの関数ドキュメンテーションコメント(KDoc)の書き方を徹底解説!初心者でもわかる丁寧なガイド
New3
Kotlin
KotlinでHello Worldを表示するには?最初の1行を実行してみよう
New4
Go言語
Go言語の依存関係管理を始めよう!go modの基本設定と導入手順
人気記事
No.1
Java&Spring記事人気No1
Kotlin
KotlinのAPI通信でGETリクエストを送る方法!初心者向け徹底ガイド
No.2
Java&Spring記事人気No2
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.3
Java&Spring記事人気No3
Swift
SwiftのURLSessionでのネットワークエラー対策!再試行とタイムアウトを初心者向けに解説
No.4
Java&Spring記事人気No4
Go言語
Go言語のテストでタイムアウト・並行処理を扱うポイント
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.8
Java&Spring記事人気No8
Swift
Swift JSONデコード失敗の原因と対処|DecodingError徹底解説