我正在尝试创建一个测试来验证JSON Post的响应是否符合预期。
我正在尝试将一个JSON消息正文的POST测试到一个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:您可以发送表单参数 或者POST中的正文内容,而不是两者!
我不确定问题是什么?
答案 0 :(得分:5)
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"));
答案 1 :(得分:1)
尝试将mimeType更改为标题而不是参数。
根据您分享的信息,我认为您需要的是Content-Type标头,而不是mimeType。