2015-10-20 74 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)