やりたいこと
- httpステータスが
400
,500
のテストをしたい - エラーの場合に、body部にエラーメッセージが入ってくる仕様のため、Mockで設定したい
- MockRestServiceServerのモックでは、200以外の場合、レスポンスボディを設定できないため、確認できるモックか他にやり方があるか知りたい。
httpステータスが200の場合 => こちらはうまくいく
java
1 @Test 2 public void GetExample() { 3 // 返却されるレスポンス 4 String jsonResponseBody = "{\"id\": 99999,\"name\": \"exampleUser\"}"; 5 6 // 呼び出す想定のURL 7 String callEndpoint = "https://get-end-point-url"; 8 9 MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate); 10 mockServer 11 .expect(requestTo(callEndpoint)) 12 .andExpect(method(HttpMethod.GET)) 13 .andRespond(withSuccess(jsonResponseBody, MediaType.APPLICATION_JSON_UTF8)); 14 15 // 呼出し準備 16 URI url = UriComponentsBuilder.fromHttpUrl(callEndpoint).build().toUri(); 17 HttpHeaders headers = new HttpHeaders(); 18 19 // restTemplateで実際に呼出し 20 ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(null, headers), User.class); 21 User responseUser = responseEntity.getBody(); 22 }
httpステータスが400の場合 => 困っている箇所
withBadRequest()
では、jsonResponseBody
を設定できなくて困っている。httpステータス400は設定できている
java
1 @Test 2 public void GetExample() { 3 // 返却されるレスポンス 4 String jsonResponseBody = "{\"message\": \"パラメータが不正です。\"}"; 5 6 // 呼び出す想定のURL 7 String callEndpoint = "https://get-end-point-url"; 8 9 MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate); 10 mockServer 11 .expect(requestTo(callEndpoint)) 12 .andExpect(method(HttpMethod.GET)) 13 .andRespond(withBadRequest()); 14 15以下、略 16 }
MockRestServiceServerを使ったことはありません。
ただhttp/1.1クライアントで200以外でレスポンスボディが必要なケースを思いつきません。
モック側でも不要な設定機能を入れる意味がないので入ってないのではないでしょうか?
回答になってなくて申し訳ありませんが、まずは必要な理由などを説明するべきだと思います。
APIを作成する側(別の人)が、ボディ部に詳細なメッセージを設定するという話があったためです。
逆に質問になってしまって申し訳ありません、パラメーター不正の場合など、apiからのメッセージはレスポンスボディ以外のどこに設定されるのでしょうか?
例)「パラメーターが設定されていません」「桁数が足りません」などのメッセージ。
個人的にはhttpは200でいいと思います。
http通信レベルでの問題ならhttpのステータスコードで、httpサーバー上に乗せてるサービスなら200のレスポンスボディに乗せた方が分かりやすいかと…
大昔から存在するステータスコードに現代のアプリやサービスのエラーコードをわざわざマッピングさせる必要はないと思うので…
回答ありがとうございます。
ただ、今回は、200以外でも詳細なエラー内容を返す仕様になっています。
そのため、どのようにテストできるかを確認したいです。
「できなくて困っている」では、本来あるべきなものがなくて困っているように読めてしまい、回答に躊躇する人が出ると思います。
最初に書いたとおり、「まずは必要な理由などを説明するべき」で「仕様で仕方なく確認する必要があり、それが可能な他のモックかその方法を知らないか?」というニュアンスを入れれば、回答する人もいるかもしれません。
特殊ケースなら自分で書いた方が早い気もしますが…
仕方ない感じが全く伝わってきませんが、、、私から言うことは他にありません。
回答1件
あなたの回答
tips
プレビュー