2015-10-20 61 views
0

我有这个类如何在虚空方法应用于JUnit测试

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

回答

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)