【问题标题】:How to make FileOutputStream.close() to throw exception myself?如何让 FileOutputStream.close() 自己抛出异常?
【发布时间】:2013-06-13 03:19:30
【问题描述】:

在 Java 中,FileOutputStream.close() 可能会抛出 IOException。 但我从来没有看到它发生。 我怎样才能产生这样的异常? 我需要制作这个。 谢谢。

【问题讨论】:

  • 一个问题:为什么?您是否正在尝试测试 .NET 框架的内部结构?好像有点无关紧要!您总是可以尝试两次关闭。可能会这样做
  • 你不能。不要测试平台,测试你的代码。
  • 假设 OP 有一个 try/catch 块或类似的东西,并且想要测试失败条件的行为。同样由于标签,我相信这是一个 Java 问题(虽然我可能是错的)
  • @JonVD 不是真正的假设,更多的是从问题文本的逻辑推断。你的观点仍然模糊不清。

标签: java exception outputstream fileoutputstream


【解决方案1】:

如果它足够重要,请编写一个单元测试来涵盖该场景。

考虑使用像Mockito 这样的模拟框架来模拟您需要的行为,而无需修改您的代码。例如,您可以通过执行以下操作让FileOutputStream 抛出IOException

final FileOutputStream out = mock(FileOutputStream.class);
doThrow(new IOException()).when(out).close();

一旦你有一个模拟的FileOutputStream,你就可以将它传递给被测系统,例如:

myComponent.writeTo(out);

其余的由您决定,例如,您的系统在这种情况下应该如何表现等等......

【讨论】:

    【解决方案2】:

    如果您的目标是测试 IOException 发生时会发生什么:

    throw new IOException("Custom Message about the exception");
    

    这将模拟抛出的异常,以便您可以看到发生此类事情时应用程序中发生的情况。

    【讨论】:

      【解决方案3】:

      制作一个将文件写入USB的程序,让它在关闭文件之前暂停一下,取出USB并等待程序尝试关闭文件。

      【讨论】:

      • 您假设 OP 只需要这样做一次,而不是在(重复的)单元测试中。即使是这样,与其他答案相比,这个答案似乎也非常复杂。
      • 从“我从来没有看到它发生”我认为 OP 想看到一个真实的生活场景
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2011-11-10
      相关资源
      最近更新 更多