当前位置: 首页 > 知识库问答 >
问题:

使IOException覆盖捕获块

胡飞舟
2023-03-14

我试图在下面的代码中覆盖catch块,但我无法。我知道在读/写文件时需要引起IOException,但我不能这样做。而且,我不能使用PowerMockito来覆盖静态方法,因为我使用的是JUnit5。有人能帮忙吗?

 @Override
    public String execute(UploadCategoryImageCommandRequest request) {
        File tempFile = null;
        FileOutputStream fos = null;
        String fileName = "";
            fileName = UUID.randomUUID().toString() + System.currentTimeMillis() + ".svg";
            try {
                tempFile = File.createTempFile(fileName, "svg");
                fos = new FileOutputStream(tempFile);
                fos.write(request.getFile().getBytes());
            } catch (IOException e) {
                log.error("File Creation Error: {}", e);
                upload.setFileStatus(FileStatus.FAILED);
                uploadRepository.save(upload);
                throw new ApplicationException(ErrorKey.IMAGE_UPLOAD, ErrorCode.FAILED);
            }
                return string;
            
        }

这是我编写的一个测试用例,但它返回了这个错误-org.mockito.exceptions.Misusing.MissingMethodInvocationException:when()需要一个参数,该参数必须是'a mock上的方法调用‘。例如:when(mock.getarticles()).ThenReturn(articles);

 @Test
    public void exception() throws IOException {
        Upload upload = Upload.builder().fileStatus(FileStatus.FAILED).imagePath("http://").build();
        MockMultipartFile firstFile = new MockMultipartFile("fileName", "fileName.svg", "text/plain", "some xml".getBytes());
        UploadCategoryImageCommandRequest uploadCategoryImageCommandRequest = UploadCategoryImageCommandRequest.builder()
                .file(firstFile)
                .uploadType(UploadType.CATEGORY)
                .build();     
Mockito.when(file.createTempFile("filename","svg")).thenThrow(IOException.class);
        uploadCategoryImageCommand.execute(uploadCategoryImageCommandRequest);

    }

共有1个答案

郏稳
2023-03-14

file.createTempFile在默认临时目录中创建一个文件,您可以通过设置java.io.tmpdir系统属性来重写该文件。如果您将其设置为某个不存在的目录,则临时文件创建将失败,您将得到IOException。只需确保在完成后恢复它,这样就不会把其余的测试搞砸了。JUnit Pioneer的setSystemProperty提供了一种出色的实现方法:

@Test
@SetSystemProperty(key = "java.io.tmpdir", value = "/no/such/dir")
public void exception() throws IOException {
    // Call your code
}
 类似资料:
  • ASPX。NET应用程序,使用XDocument。Load()从XML文件中读取。有时它会抛出IOException static,说明文件无法打开,因为它正被另一个进程使用。我无法通过打开文件并重新加载网站来随意重新创建它。但更奇怪的是,异常发生在Try-Catch块中,我在其中显式捕获系统。IOException。 这是堆栈: 异常类型:IOException 线程信息:线程ID:18线程帐户

  • 我想寻求帮助,了解如何在JUnit测试中捕获IOException,以测试我的代码在发生错误时是否会抛出正确的异常。 以下是我的主要代码: 这是我的JUnit: 我想我必须在JUnit测试中创建一个错误的路径来抛出该异常,但我没能得到我想要的结果。我很感谢你的帮助。谢谢

  • 在junit5和Mockito中如何覆盖返回void的方法的catch块。 下面提到的dump方法返回void并抛出RepositoryException和JSONException。 TidyJosnitemWrite.dump(节点,stringWriter,-1);

  • 问题内容: 我想介绍getKeyStore()方法,但是我不知道如何介绍NoSuchAlgorithmException,KeyStoreException,UnrecoverableKeyException和CertificateException的catch块。我的方法是: 我该怎么做? 问题答案: 您可以 模拟 该块的任何句子以引发要捕获的异常。 示例模拟对throw 的调用。在这种情况下,

  • 问题内容: 我正在用Go编写Web应用程序的代码,尽管各种mux库提供了一种设置自定义404错误处理程序的方法,但其他4xx和5xx错误代码却一无所获。 一种建议是在ResponseWriter界面中重写WriteHeader方法并检查状态代码,但是我对如何实际写入感到困惑(在输出之前重写ResponseWriter方法)。从negroni包中可以找到一个可能的例子。 这是为4xx和5xx错误提供

  • 我已经为以下函数编写了Junit测试用例。当检查JACOCO测试覆盖率时。它显示测试用例只覆盖了try块。我是编写测试用例的新手。如何在测试用例中覆盖异常和catch块 这里有一个方法 和测试方法