java - 如何从 MockMultipartFile 在 Spring MVC 测试中生成异常?

标签 java mocking mockito spring-mvc-test

我正在尝试在 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/

相关文章:

java - NetBeans 安装程序插件

ios - RxSwift 在模拟的 UserDefaults 上观察测试用例

java - 使用 Mockito 调用回调

java - 为什么我的对象没有正确反序列化?

java - 性能问题: Latency Spike happens sometimes in Kafka Streams

java - Castor 为复杂类型生成类不起作用

python - MagicMock 和包装

python - 如何模拟类实例属性?

java - 模拟@UpdateTimestamp Hibernate 注释

unit-testing - Mocking : Unit test question 中的依赖项太多