web-dev-qa-db-ja.com

JSON POST RestAssuredを使用

JSON投稿の応答が期待どおりであることを検証するためのテストを作成しようとしています。

JSONメッセージ本文のPOSTをURLにテストしようとしています。URLは次にテキストメッセージを送信し、成功すると、JSON形式で再び成功したという応答を送信します。

私のテストは次のとおりです

public void simpleTest() {

      String myJson = "{\"phoneNumber\":\"353837986524\", \"messageContent\":\"test\"}";
      given()
              .port(31111) // port number
              .header("Content-Type", "application/json")
              .body(myJson)
              .when()
              .post("/testenvironment/text/send")
              .then().assertThat()
              .body("message", equalTo("{\"resultMessage\":\"Message accepted\"}"));
  }

しかし、この例外が発生しているようです

Java.lang.IllegalStateException:フォームパラメータOR本文のコンテンツをPOSTで送信できますが、両方を送信することはできません!

そして、私は問題が何であるかわかりませんか?

5
user3520080

Restassuredは、スタックトレースに従ってJsonの解析に失敗しています。 org.json jarを使用します。これは、大きなjson入力を処理するためのよりエレガントな方法です。 Javaでのjson処理の他の実装があり、好みに応じて使用できます。

あなたのコードに来る:

public void simpleTest() {

   // use org.json JSONObject to define your json
   JSONObject jsonObj = new JSONObject()
                             .put("phoneNumber","353837986524")
                             .put("messageContent","test");

   given()
      .port(31111) // port number
      .contentType("application/json")  //another way to specify content type
      .body(jsonObj.toString())   // use jsonObj toString method
   .when()
      .post("/testenvironment/text/send")
   .then()
      .assertThat()
      .body("message", equalTo("{\"resultMessage\":\"Message accepted\"}"));
}

また、質問の残りのサービスの出力が何であるかがわかりませんでした。たとえば、json {"resultMessage":"Message accepted"}を返している場合、次の方法で応答を検証する必要があります。

...
.body("resultMessage",equalTo("Message accepted"));
7
parishodak

MimeTypeをパラメーターではなくヘッダーに変更してみてください。

そして、あなたが共有した情報に基づいて、必要なのはmimeTypeではなくContent-Typeヘッダーだと思います。