😺

# スタブとかモック(モックサーバー)に混乱した話 & WireMock利用法

に公開

はじめに

この記事は私が働き出してから迷った部分を備忘録として記載しています。
今回はJUnitなどの単体テストにおける内容ではなく、マイクロサービス間の結合テストがテーマです。
※単体テストにおけるスタブ・モックについては参考文献をご覧ください🙇

大抵のWEBアプリケーション開発では、フロントエンド・バックエンドが分業されており、
スケジュール遅延を防ぐために、フロントエンド側でダミーデータを使う場面があると思います。
そのために必要なのが、WireMockというサービスです。


対象者

  • WireMockを利用してダミーデータを登録する機会がある人
  • スタブという意味に不安がある人
  • エンジニア組織が分業化されている人

紹介ツール

https://wiremock.org/

まず、スタブとモック(モックサーバー)の違い

  • スタブ:必要最低限の決まったレスポンスを返す
  • モック(モックサーバー):期待通りのリクエストが送信されているか検証も可能

英語を直訳してみると…

  • stub:切り株、短い突出部、未完成部分の代替プログラム
  • mock:模造の、見せかけの

なるほど、mockは「見せかけのもの」なのか…


モックとモックサーバーって違くない?

はい、この記事を書いていてようやく理解しました。

  • モック
  • モック(モックサーバー)

弊社では この2つを1つの言葉として使っていた のです😱
本当に理解するまで時間がかかりました。


改めて、スタブとモックサーバーの違い

用語 説明
スタブ 特定の入力に対する固定の出力を提供する
モックサーバー 実際のサーバーを模倣し、APIエンドポイントのようなレスポンスを生成する

→ 個人的に「モックサーバーに対してスタブを設定する」という形だと理解しています。

https://goyoki.hatenablog.com/entry/20120301/1330608789


WireMockを利用する場合の言葉の使い分け

  • スタブ
    特定のHTTPリクエスト(URL、メソッド、ヘッダー、ボディなど)に対して
    特定のHTTPレスポンス(ステータスコード、ヘッダー、ボディなど)を返す振る舞いを設定

  • モックサーバー
    WireMockはモックサーバーとして機能し、スタブに基づいてリクエストを処理しレスポンスを返す


じゃあWireMockで何ができるの?

結論 → 指定したURLを叩いた際のレスポンス(スタブ)を設定できる!


実践手順

① Standalone JAR をダウンロード

https://wiremock.org/

② 起動する

公式ドキュメントに沿って起動します。

③ スタブデータを登録

URL

http://localhost:8080/__admin/mappings
POST形式)

BODY(登録する内容)

{
  "request": {
    "url": "/test",
    "method": "GET"
  },
  "response": {
    "status": 200,
    "body": "{\"test\":\"test/test/test\",\"JSON\":\"WireMockのテストです\"}",
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

▼404返却パターン

{
  "request": {
    "url": "/test/error",
    "method": "GET"
  },
  "response": {
    "status": 404,
    "body": "{\"error\":\"これはエラーです\"}",
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

④ 指定URLにアクセス

レスポンスが設定通り返却されます。

▼404返却パターン

まとめ

略語は、何を指しているのかを正しく理解すること

スタブを活用して結合テストを円滑に!

WireMockは非常に便利!

少しでも疑問を解消できる記事になっていれば幸いです。
次回は**単体テストの「スタブ・モック」**についても書きたいなぁ…

Discussion