当前位置: 首页 > 面试题库 >

Java:如何测试调用System.exit()的方法?

桂志诚
2023-03-14
问题内容

我有一些应调用System.exit()某些输入的方法。不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新的Thread中似乎无济于事,因为System.exit()终止JVM不仅终止当前线程。有什么通用的模式可以处理吗?例如,我可以用存根替换System.exit()吗?

[编辑]有问题的类实际上是我要在JUnit中测试的命令行工具。也许JUnit根本不是适合该工作的工具?欢迎提出补充回归测试工具的建议(最好是与JUnit和EclEmma很好地集成在一起的工具)。


问题答案:

库系统规则具有一个称为ExpectedSystemExit的JUnit规则。使用此规则,你可以测试调用System.exit(...)的代码:

public void MyTest {
    @Rule
    public final ExpectedSystemExit exit = ExpectedSystemExit.none();

    @Test
    public void systemExitWithArbitraryStatusCode() {
        exit.expectSystemExit();
        //the code under test, which calls System.exit(...);
    }

    @Test
    public void systemExitWithSelectedStatusCode0() {
        exit.expectSystemExitWithStatus(0);
        //the code under test, which calls System.exit(0);
    }
}


 类似资料:
  • 问题内容: 假设我有一个可以进行大量处理的类,并使用多个集合进行操作。我要做的是确保这种操作不会导致内存不足,甚至更好,我想设置一个阈值来确定它可以使用多少内存。 什么是正确的方法?还是这不可能/不可行? 问题答案: 我可以想到几种选择: 通过微基准测试(即jmh)找出您的方法需要多少内存。 基于启发式估计的建筑分配策略。有几种实现类大小估计的开源解决方案,即ClassSize。一种更简单的方法可

  • 问题内容: 这是我先前提出的问题的后续措施。 Tomcat 5.0.28有一个错误,即容器在关闭时未调用Servlet的destroy()方法。这已在Tomcat 5.0.30中修复,但是如果Servlet的destroy()方法具有System.exit(),则将导致Tomcat Windows服务抛出错误1053,并拒绝正常关闭(有关更多详细信息,请参见上面的链接)这个错误) 任何人都不知道是

  • 我试图在下面的类中进行测试,但得到了“org.mockito.exceptions.base.MockitoException:只有void方法才能执行任何操作()!”当我试图嘲笑时,我得到了nullpointerException。 笔试= 模拟测试 @RunAnd(MockitoJUnitRunner.class) 类PsqlConfigurationTest{ }

  • 我创建了一个名为的类,它以分数形式表示有理数(带有分子和分母)。我还创建了一个静态方法,它接受两个并在其他私有静态方法的帮助下将它们相加(、)。我正在使用类(这有主要方法)测试我的类。分数添加是不正确的。 我想调试我的 add 方法(使用 Netbeans 调试器),但是当我点击调试时,它只显示 main 方法中的变量,而不显示 方法中的变量。我无法“看到”我的方法本身的计算。有没有办法调试不在主

  • 问题内容: 我几乎可以肯定这是不可能的,但是值得一试。 我正在为某个工具编写命令行界面。我说的是一个调用另一个Java应用程序的Java应用程序。该工具在执行后调用,从而终止了我自己的执行环境。我不要 有什么方法可以忽略来电吗? 问题答案: 是的,使用SecurityManager可以实现。尝试以下 在您的班级中,使用以下调用: