java-如何使用JUnit和Mockito用静态util调用测试Rest Controller
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何使用JUnit和Mockito用静态util调用测试Rest Controller,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2274字,纯文字阅读大概需要4分钟。
内容图文
![java-如何使用JUnit和Mockito用静态util调用测试Rest Controller](/upload/InfoBanner/zyjiaocheng/670/bb8141ee9ac34501987ecfcc2432293d.jpg)
我有带有方法create的Rest Controller(使用util类databaseService(databaseDao缓存)进行验证)
@RestController
@RequestMapping("files")
public class FilesController {
private IDbFilesDao dbFilesService;
private Map<String, Table> tables;
public FilesController(IDbFilesDao dbFilesService, Map<String, Table> tables) {
this.dbFilesService = dbFilesService;
this.tables = tables;
}
@PostMapping("{table}")
public ResponseEntity createTable(@PathVariable("table") String tableName,
@RequestBody File file) {
FilesValidator.validateAdding(tableName, tables, file);
dbFilesService.create(tableName, file);
URI location = ServletUriComponentsBuilder.fromCurrentRequest().buildAndExpand(file.getKey()).toUri();
return ResponseEntity.created(location).build();
}
}
我有一个测试:
@RunWith(SpringRunner.class)
@WebMvcTest(value = FilesController.class, secure = false)
public class FilesControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private IDbFilesDao dbFilesService;
@MockBean
private Map<String, Table> tables;
@Test
public void create() throws Exception {
RequestBuilder requestBuilder = MockMvcRequestBuilders
.post("/files/tableName")
.accept(MediaType.APPLICATION_JSON)
.content(POST_JSON_BODY)
.contentType(MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
MockHttpServletResponse response = result.getResponse();
assertEquals(HttpStatus.CREATED.value(), response.getStatus());
}
}
仅当@RestContoller中没有此行时,它才能很好地工作:
FilesValidator.validateAdding(tableName, tables, file);
在此行中-找不到404.
FilesValidator-带有静态方法的util类.它检查数据是否有效并且什么也不做,或者抛出带有状态码的运行时异常(例如404).
如何在不取消验证的情况下进行修复?
解决方法:
1)将验证器调用移至包级方法并进行少量重构:
@PostMapping("{table}")
public ResponseEntity createTable(@PathVariable("table") String tableName,
@RequestBody File file) {
validateAdding(tableName, tables, file);
...
}
validateAdding(String tableName, Map<String, Table> tables, File file){
FilesValidator.validateAdding(tableName, tables, file);
}
2)在测试中监视控制器:
@SpyBean
private FilesController filesControllerSpy;
3)使validateAdding方法什么都不做:
@Test
public void create() throws Exception {
doNothing().when(filesControllerSpy)
.validateAdding(any(String.class), any(Map.class), any(File.class));
...
内容总结
以上是互联网集市为您收集整理的java-如何使用JUnit和Mockito用静态util调用测试Rest Controller全部内容,希望文章能够帮你解决java-如何使用JUnit和Mockito用静态util调用测试Rest Controller所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。