我在新项目中测试新的servlet 3异步请求,并在测试控制器时遇到问题。
我有一个像这样的控制器方法:
@RequestMapping(value = "/thumbnails", method = RequestMethod.GET)
public Callable<ResponseEntity<List<Thumbnail>>> getAllThumbnails() {
//at this point I get results from the repository
return () -> {
//at this point I don't get any results
final List<Thumbnail> thumbnails = thumbnailRepository.findAll();
return ResponseEntity.ok(thumbnails);
};
}
并进行相应的测试:
@Test
@Transactional
public void testGetAllThumbnails() throws Exception {
thumbnailRepository.saveAndFlush(thumbnail);
final MvcResult mvcResult = restThumbnailMockMvc.perform(get("/test/thumbnails"))
.andExpect(request().asyncStarted())
.andExpect(request().asyncResult(instanceOf(ResponseEntity.class)))
.andReturn();
mvcResult.getAsyncResult();
restThumbnailMockMvc.perform(asyncDispatch(mvcResult))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.[*].id").value(hasItem(thumbnail.getId().longValue())))
.andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME)))
.andExpect(jsonPath("$.[*].fileName").value(hasItem(DEFAULT_FILE_NAME)));
}
Repository和stuff是一个简单的spring数据jpa bean,整个配置基于spring boot。
如果我以正常方式查询控制器,那么每件事情都可以正常工作,但在测试中,存储库不会返回任何结果。
非常感谢你在高级方面提供的帮助,我在网上找不到类似的东西。
答案 0 :(得分:0)
在经过一番试验和错误后,我发现了什么问题。
问题是,测试方法是否在事务中运行,并且由于某种原因,在测试运行时无法在控制器的可调用对象中访问相同的事务。从测试方法中删除@Transactional
注释后,每件事都可以正常工作。