0
は、私はそれがDeferredResult<>
を返し、このRESTコントローラ春とユニットテスト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を使用して)これをテストする方法です。すべての明確化は、ありがとう!