カテゴリ: 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
Go言語
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
New2
Kotlin
Kotlinのコーディング規約(公式スタイルガイド)とは?読みやすいコードを書くための基本ルール
New3
Kotlin
Kotlinの関数型を整理するパッケージ・ファイル構造の例を初心者向けにやさしく解説!
New4
Swift
Swiftデータ型まとめ|String・Int・Bool・Arrayの基本を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.3
Java&Spring記事人気No3
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.4
Java&Spring記事人気No4
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.5
Java&Spring記事人気No5
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.6
Java&Spring記事人気No6
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.7
Java&Spring記事人気No7
Kotlin
Kotlinのgetter・setterのカスタマイズ方法をわかりやすく解説!初心者向け完全ガイド
No.8
Java&Spring記事人気No8
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!