見出し画像

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

はじめに

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

大抵のWEBアプリケーション開発の場合、フロントエンド・バックエンド領域は分業化されており スケジュール遅延を防ぐため、フロントエンド側にダミーデータを提供する場面があると思います。 そうすればバックエンド側が完成していなくてもテストが進められてハッピーな状態です!

その状況を作り出すために必要なものがWireMockというサービスです。

対象者

  • WireMockを利用してダミーデータを登録する機会がある人

  • スタブという意味に不安がある人

  • 社内のエンジニア組織が分業化されている人

紹介ツール

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

  • スタブ

    • 必要最低限の決まったレスポンスを返すものとして利用

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

    • 期待通りのリクエストが送信されているか検証するためにも利用




うん、正直わかっていない。 そんな時は、英語を直訳してみます。

  • stub

    • 木の)切り株;(地中・幹・枝に残った草木の)切り残り,折れ残り;(折れた歯の)根;短い突出部

    • プログラム開発時に未完成の部分の代わりに用いるコンピュータプログラム

  • mock

    • 模擬の、模造の、見せかけの

なるほど... mockが見せかけのものということは理解した。

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

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

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

弊社では二つの意味を一つの言葉で表現していたのです。😱 本当に理解するまで時間がかかった

今回の話ではモックサーバーについて紹介していきます!

※スタブとモックがは単体テスト(Unitテスト)のテストダブルパターンで利用されています。  それについては下記の記事をご覧ください

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

  • スタブ

    • 特定の入力に対する固定の出力を提供する

  • モックサーバー

    • 実際のサーバーを模倣し、実際のAPIエンドポイントと同様のレスポンスを生成します。

個人的に考えた結果、下記のような形なのではと感じました。(間違っているかも)

モックサーバーに対してスタブを設定する
↓
モックサーバーにアクセスすることで設定したスタブが返却される



では、WireMockを利用した際の言葉の使い分けは下記です。 - スタブ - 特定のHTTPリクエスト(URL、メソッド、ヘッダー、ボディなど)に対して特定のHTTPレスポンス(ステータスコード、ヘッダー、ボディなど)を返す振る舞いを設定することができる。

  • モックサーバー

    • WireMockはモックサーバーとして機能し、事前に設定されたルール(スタブ)に基づいてリクエストを処理し、レスポンスを返します。

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

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


まずは実践してみましょう。

①下記のリンクから「Standalone JAR」をダウンロードしてください (Docker版もあるのでそちらでも)


②ドキュメントに沿って起動します

image.png
image.png

③起動が完了したらスタブデータを登録します。

image.png
image.png

▼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"
        }
    }
}

④指定したURLにアクセスすると、設定した値が返却されます

image.png
image.png

▼404返却パターン

image.png
image.png


▼BODY(404リクエストを記載)


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


image.png
image.png

このように指定したURLに対するレスポンスを自由に設定することができます! 適当なサーバーにデプロイすることで、フロント側は自由にテストを実施することが可能になります!

これってかなり便利じゃないですか???

まとめ

  • 短縮された言葉は、どの言葉を指しているのか理解すること

  • スタブを利用してお互いが幸せな結合テストを実施しよう

  • WireMockは非常に便利!

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

参考文献

▼WireMock & モックサーバー系 wiremock.org www.techmatrix.co.jp

▼単体テストのテストダブル系 www.techmatrix.co.jp qiita.com https://gitpress.io/c/rails_knowlegde/stub_mock [図解]スタブとモックの違い - Qiita


この記事が気に入ったらサポートをしてみませんか?