【问题标题】:How to apply jUnit test on a void method如何在 void 方法上应用 jUnit 测试
【发布时间】:2015-10-20 15:53:33
【问题描述】:

我有这门课

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

【问题讨论】:

    标签: testing methods junit void


    【解决方案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 的 Mock 并使用 @InjectMocks 将它们注入您的主对象。 然后,您可以使用 Mockito 的 verify() 方法来确保发生了正确的事情(例如使用 404 代码调用 response.setStatus)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多