有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何通过系统上的单元测试。犯错误

在我需要对其进行单元测试的类中,有一部分使用系统。犯错误打印当测试到达该行时,我们如何抛出异常或通过任何@rule来通过测试? 要编写代码,请执行以下操作:

if (a == null) {
            System.err.println("Error: empty file");
            System.exit(1);
        } 

谢谢


共 (4) 个答案

  1. # 1 楼答案

    你可能想把这句话和接下来的内容放在另一个类中,并模仿它。当你到达目的地时,你会遇到问题

    System.exit(1)
    

    因为这将迫使JVM退出,而您的测试将无法通过

    请查看this现有问题以寻求帮助

  2. # 2 楼答案

    使用sytemExit(int代码)方法创建一个类。调用该方法,而不是直接调用系统。退出(…),通过这种方式,您可以通过模拟SystemExitter(使用PowerMock、EasyMock、Mockito等)来测试代码

    尽管您永远无法测试sytemExit方法(…)对于SystemExitter,它将只包含一行代码

  3. # 3 楼答案

    您可以将err重定向到引发异常的流:

    OutputStream os = new OutputStream() {
      @Override public void write(int b) throws IOException {
        throw new IOException ();
      }
    };
    System.setErr(new PrintStream(os));
    

    当一些代码调用System.err.println()时,您将得到一个IOException(您可以更改异常)

    因此,在测试中,您可以检查是否抛出了IOException

  4. # 4 楼答案

    您可以使用System#setErr临时替换测试方法主体的System.err。它可以是一个mock,以便您可以施加任何您喜欢的行为,也可以是一个流,您可以在其中累积类输出,以供后面的验证

    确保在测试方法结束之前将原始流放回原处,以免影响其他测试或测试框架本身