Testing 如何在void方法上应用jUnit测试

Testing 如何在void方法上应用jUnit测试,testing,methods,junit,void,Testing,Methods,Junit,Void,我有这门课 @Value("${norsys.loadfile.directory}") private String chemin; @RequestMapping(value = "/{fileName:.+}", method = RequestMethod.GET) @ResponseBody() public void loadVideoFile(@PathVariable("fileName") String fileName,HttpServletResponse respons

我有这门课

@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测试来保持高覆盖率,我希望您能给我一个想法,谢谢您

一般来说,您可以使用Mockito来测试具有重量级依赖项的类。使用模拟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)