空回复 body for post 放心
Empty respond body for post with rest assured
我正在放心使用 junit4。在我的测试方法中,我在 mongodb 中创建了一个 object,当我 运行 测试时,它也成功地持续存在。但是我需要存储创建的 ID,所以我尝试获取响应 body。但是 response.getBody().asString()
是空的。
@Test
public void testA() throws JSONException {
Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>();
createVideoAssignmentParm.put("test1", "123");
Response response = expect().statusCode(201).when().given().contentType("application/json;charset=UTF-8")
.headers(createVideoAssignmentParm).body(assignment).post("videoAssignments");
JSONObject jsonObject = new JSONObject(response.getBody().asString());
id= (String)jsonObject.getString("assignmentId");
}
当我从外部调用其余端点时,它 return 的响应 body 也包含相关字段,因此其余部分没有问题 API。
如果上述问题没有答案,那么你们如何放心地使用 return body 测试 post,以便我可以尝试这种方式。
我的控制器方法看起来像,
@RequestMapping(value = "/videoAssignment", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE, method = RequestMethod.POST)
@ResponseBody
public HttpEntity<VideoAssignment> createVideoAssingnment(
//@ApiParam are there..){
//other methods
return new ResponseEntity<>(va, HttpStatus.CREATED);
}
这就是 REST-Assured 的亮点所在,其流畅的界面非常有助于找到正确的使用方法。如果你使用的是 Spring Boot,测试应该可以在不添加依赖项或配置的情况下工作(除了放心,当然 :)
示例控制器
@RestController
@RequestMapping("/api")
public class Endpoints {
public static class Assignment {
public int id = 1;
public String name = "Example assignment";
}
@RequestMapping(value = "/example",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Assignment> example(@RequestBody Assignment assignment) {
return ResponseEntity.created(URI.create("/example/1"))
.body(assignment);
}
}
并测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class EndpointsTest {
@Autowired
private ObjectMapper objectMapper;
@Value("${local.server.port}")
private int port;
@Before
public void setUp() {
RestAssured.port = port;
}
@Test
public void exampleTest() throws Exception {
Endpoints.Assignment assignment =
given()
.contentType(ContentType.JSON)
.body(objectMapper.writeValueAsBytes(new Endpoints.Assignment()))
.when()
.post("/api/example")
.then().statusCode(HttpStatus.SC_CREATED)
.extract().response()
.as(Endpoints.Assignment.class);
// We can now save the assignment.id
assertEquals(1, assignment.id);
}
}
我们使用不同的 wat 来调用带有 RestAssured 的服务。但是,如果您得到一个空字符串,您可以使用 .peek()
.
调试您的服务是否被调用
你可以使用这个测试:
@Test
public void testStatus()
{
String response =
given()
.contentType("application/json")
.body(assignment)
.when()
.post("videoAssignments")
.peek() // Use peek() to print the ouput
.then()
.statusCode(201) // check http status code
.body("assignmentId", equalTo("584")) // whatever id you want
.extract()
.asString();
assertNotNull(response);
}
您可以尝试使用 log().all() 方法查看 response.The 的内容,以下代码片段可能对您有所帮助。
@Test
public void test(){
Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>();
createVideoAssignmentParm.put("test1", "123");
Response response=given()
.spec(request)
.contentType(ContentType.JSON)
.body(assignment)
.post("videoAssignments");
response.then()
.statusCode(201).log().all();
assignmentId=response.path("assignmentId");
}
我正在放心使用 junit4。在我的测试方法中,我在 mongodb 中创建了一个 object,当我 运行 测试时,它也成功地持续存在。但是我需要存储创建的 ID,所以我尝试获取响应 body。但是 response.getBody().asString()
是空的。
@Test
public void testA() throws JSONException {
Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>();
createVideoAssignmentParm.put("test1", "123");
Response response = expect().statusCode(201).when().given().contentType("application/json;charset=UTF-8")
.headers(createVideoAssignmentParm).body(assignment).post("videoAssignments");
JSONObject jsonObject = new JSONObject(response.getBody().asString());
id= (String)jsonObject.getString("assignmentId");
}
当我从外部调用其余端点时,它 return 的响应 body 也包含相关字段,因此其余部分没有问题 API。
如果上述问题没有答案,那么你们如何放心地使用 return body 测试 post,以便我可以尝试这种方式。
我的控制器方法看起来像,
@RequestMapping(value = "/videoAssignment", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE, method = RequestMethod.POST)
@ResponseBody
public HttpEntity<VideoAssignment> createVideoAssingnment(
//@ApiParam are there..){
//other methods
return new ResponseEntity<>(va, HttpStatus.CREATED);
}
这就是 REST-Assured 的亮点所在,其流畅的界面非常有助于找到正确的使用方法。如果你使用的是 Spring Boot,测试应该可以在不添加依赖项或配置的情况下工作(除了放心,当然 :)
示例控制器
@RestController
@RequestMapping("/api")
public class Endpoints {
public static class Assignment {
public int id = 1;
public String name = "Example assignment";
}
@RequestMapping(value = "/example",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Assignment> example(@RequestBody Assignment assignment) {
return ResponseEntity.created(URI.create("/example/1"))
.body(assignment);
}
}
并测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class EndpointsTest {
@Autowired
private ObjectMapper objectMapper;
@Value("${local.server.port}")
private int port;
@Before
public void setUp() {
RestAssured.port = port;
}
@Test
public void exampleTest() throws Exception {
Endpoints.Assignment assignment =
given()
.contentType(ContentType.JSON)
.body(objectMapper.writeValueAsBytes(new Endpoints.Assignment()))
.when()
.post("/api/example")
.then().statusCode(HttpStatus.SC_CREATED)
.extract().response()
.as(Endpoints.Assignment.class);
// We can now save the assignment.id
assertEquals(1, assignment.id);
}
}
我们使用不同的 wat 来调用带有 RestAssured 的服务。但是,如果您得到一个空字符串,您可以使用 .peek()
.
你可以使用这个测试:
@Test
public void testStatus()
{
String response =
given()
.contentType("application/json")
.body(assignment)
.when()
.post("videoAssignments")
.peek() // Use peek() to print the ouput
.then()
.statusCode(201) // check http status code
.body("assignmentId", equalTo("584")) // whatever id you want
.extract()
.asString();
assertNotNull(response);
}
您可以尝试使用 log().all() 方法查看 response.The 的内容,以下代码片段可能对您有所帮助。
@Test
public void test(){
Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>();
createVideoAssignmentParm.put("test1", "123");
Response response=given()
.spec(request)
.contentType(ContentType.JSON)
.body(assignment)
.post("videoAssignments");
response.then()
.statusCode(201).log().all();
assignmentId=response.path("assignmentId");
}