0
나는이 REST 컨트롤러 그것은 DeferredResult<>
반환봄과 단위 테스트 DeferredResult
@RequestMapping(path = "/hello", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ApiOperation(code = CREATED, value = "Blah", response = SomeResponse.class)
@ApiResponses(value = {
@ApiResponse(code = CREATED, message = "blah")
})
public DeferredResult<SomeResponse> hello(@RequestBody final SomeRequest req) {
DeferredResult<SomeResponse> callback = new DeferredResult<>();
if (req.someProperty.equals("notimportant")) {
// return a new SomeResponse obj
SomeResponse sr = new SomeResponse();
sr.setOneThing("whocares");
sr.andAnother("snore");
//...?
} else {
// does something asynchronously
someService.doSomething(req, callback::setResult);
}
return callback;
}
있습니다. 특정 조건에서 응답을 반환하고 싶습니다 (위의 if()
참조). 이것에 대해 가장 좋은 방법은 무엇입니까? 다른 스레드를 만들고 callback.setResult()
으로 전화합니까?
@Test
public void testWhatever() throws Exception {
SomeRequest request = createRequest();
String requestContent = this.xmlObjectMapper.writeValueAsString(request);
MvcResult mvcResult = this.mockMvc.perform(MockMvcRequestBuilders.post("/api/hello")
.contentType(MediaType.APPLICATION_XML).content(requestContent).accept(MediaType.APPLICATION_XML))
.andReturn();
this.mockMvc.perform(asyncDispatch(mvcResult)).andExpect(MockMvcResultMatchers.status().isCreated())
.andExpect(MockMvcResultMatchers.content().contentTypeCompatibleWith(MediaType.APPLICATION_XML));
String responseString = mvcResult.getResponse().getContentAsString();
SomeResponse resp = this.xmlObjectMapper.readValue(responseString,SomeResponse.class);
Assert.assertNotNull(resp);
// more assertions...
}
이 아무것도 안하고있다가하는 NPE를 받고 :
또 다른 질문은 내가 (MockMVC 사용)을 테스트하는 방법입니다. 모든 설명 감사, 감사!