我有这个课程
@Value("${norsys.loadfile.directory}")
private String chemin;
@RequestMapping(value = "/{fileName:.+}", method = RequestMethod.GET)
@ResponseBody()
public void loadVideoFile(@PathVariable("fileName") String fileName,HttpServletResponse response) {
try {
response.setContentType("video/mp4");
Files.copy(Paths.get(chemin, fileName), response.getOutputStream());
response.flushBuffer();
} catch (java.io.FileNotFoundException e) {
response.setStatus(HttpStatus.NOT_FOUND.value());
} catch (Exception e) {
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
}
}
我不知道如何应用JUnit测试来保持高覆盖率,我希望你能给我一个想法,谢谢
答案 0 :(得分:1)
通常,您可以使用Mockito http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html来测试具有重量级依赖关系的类。使用模拟HttpServletResponse类,您可以验证是否为您的失败/成功案例设置了适当的状态代码。
使用这些静态方法会遇到一些问题。
而不是
Files.copy(Paths.get(chemin, fileName), response.getOutputStream());
您可以使用非静态类,然后可以模拟
class ResourceCopier {
public void copy(String dir, String file, OutputStream os) {
Files.copy(Paths.get(dir, file), os);
}
}
您的主要课程使用
private ResourceCopier resourceCopier;
public void loadVideoFile(....) {
resourceCopier.copy(chemin, fileName, response.getOutputStream());
}
在测试类中,您可以创建主对象,创建一个ResourceCopier和HttpServletResponse模拟器,并使用@InjectMocks将它们注入主对象。 然后,您可以使用Mockito的verify()方法来确保发生了正确的事情(例如使用404代码调用response.setStatus)