今年の2月に転職してエンジニアになってからはや10ヶ月、去年の今頃はプログラムとなんの関係もない仕事をしていたわけでこの一年色々あったなあと振り返っています。インデントもわからなかったところから、今では中々に大きなプロジェクトに関わらせてもらうことができて存外の喜びを感じています。
って感じで今年のまとめ的な硬い感じなのはここまでしておきましょうー。第一回からしばらくご無沙汰だった記事の内容に入りたいと思います!
JavaのAPI開発をしていた僕がFT書いていた時のこと、こんなことをチームリーダーの人からお願いされました。
『WireMock使ってFT書いてくれる?』
Mockはわかるけどワイヤー?針金?
って感じに最初はなりました。WireMockでぐぐりまくること数分。APIの応答をモック化してくれるモックサーバーであることを知る僕。
Java以外でもよくあることだと思うのですが、APIを開発しているとその処理の途中で他のAPIを呼び出して応答を受け取る必要が出てくることがよくあります。例えば他社のAPIが持っている機能が必要なときなんかですね。
既存のシステムを借りることができて手間が減るのは良いことなのですが、開発する上で困ったことがあったりします。その呼び出したいAPIがまだデプロイされていないとFTなどのテストがそのままでは書けないということですね。
そこでこいつの出番です。呼び出したいAPIの応答をモック化してFTを通すことができます。
方法ですがまずbuild.gradleに設定を入れます。(Spring、JUnit5前提でお願いします)
dependencies {
testCompile("com.github.tomakehurst:wiremock:2.14.0")
}
(バーションは新しいものがあるかもしれません)
そして呼び出したいAPIの応答(モック値)をJSONで記述します。
test.json
"request": {
"url": "/test/getTest",
"method": "GET"
},
"response": {
"status": 200,
"body": "Test",
"headers": {
"Content-Type": "application/json"
}
}
resourcesフォルダ配下にstubsというフォルダを作成してtest.json
を配置します。
あとはFTのテストクラスに以下のアノテーション付与すればOKです。
@AutoConfigureWireMock(port = 9000, stub = "classpath:/stubs")
あとはApplication.ymlにlocalhostなどの設定があれば動くはずです。
WireMockを使うと意図的にアクセス時間を遅らせてタイムアウト想定のテストが書けたりとテストで便利なのと、JSONでモック値をそのままかけることが利点なようです。
使い始めたばかりでまだ自信ないのでおかしいところなどありましたらご指摘いただけると嬉しいです!
それではまた次の記事でお会いしましょう!