我正在尝试在 Spring MVC 中为 Controller 编写一些单元测试,部分 Controller 方法具有以下代码:
try {
newProjectFile.setFileType(fileType);
newProjectFile.setContent(BlobProxy.generateProxy(file.getInputStream(), file.getSize()));
} catch (Exception e) {
throw new BadUpdateException(e.getMessage());
}
我在单元测试中设置了一个 MockMultipartFile,并想在这里测试异常情况,以便得到错误的请求响应。
我尝试过设置如下内容:
单元测试:
MockMultipartFile file = new MockMultipartFile("file", "receipts.zip", "application/zip", "".getBytes());
[...]
when(file.getInputStream()).thenThrow(IOException.class);
[...]
我收到以下错误:
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
如果我不能像使用任何普通模拟对象一样在 MockMultipartFile 上使用“when”,并且 Mockito 不允许您模拟静态方法,那么我如何才能在此处抛出异常?
编辑: 正如评论中提到的,MockMultipartFile 不是来自 Mockito,因此出现上述错误。
问题实际上是如何在 try/catch block 中抛出异常,这可能是通过在 file.getInputStream() 上抛出 IOException 或在 BlobProxy.generateProxy() 上抛出 UnsupportedOperationException 来实现的。 ,这样我的方法就会抛出 BadUpdateException。
最佳答案
所以我的同事找到了一个使用匿名内部类来解决这个问题的好方法:
@Override
public InputStream getInputStream() throws IOException {
throw new IOException();
}
};
这意味着当尝试从 MockMultipartFile 获取 InputStream 时, Controller 方法中的 try/catch block 中会抛出异常,结果是 BadUpdateException。
关于java - 如何从 MockMultipartFile 在 Spring MVC 测试中生成异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847014/