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

在JUnit测试中处理System.exit(0)

锺离阿苏
2023-03-14
问题内容

我正在为现有的Java
Swing应用程序执行一些测试,以便可以安全地重构和扩展代码而不会破坏任何内容。我从JUnit中的一些单元测试开始,因为这似乎是最简单的入门方法,但是现在我的首要任务是创建一些端到端测试,以对整个应用程序进行练习。

我将每种测试方法放在一个单独的测试用例中,并fork="yes"在Ant的junit任务中使用该选项,从而在每个测试中重新启动应用程序。但是,我想作为测试实现的一些用例涉及用户退出应用程序,这导致调用System.exit(0)的方法之一。JUnit将此视为错误:junit.framework.AssertionFailedError: Forked Java VM exited abnormally

有没有办法告诉JUnit以零返回码退出实际上是可以的?


问题答案:

我该如何处理是安装一个安全管理器,该安全管理器在调用System.exit时会引发异常。然后是捕获异常且不会使测试失败的代码。

public class NoExitSecurityManager
    extends java.rmi.RMISecurityManager
{
    private final SecurityManager parent;

    public NoExitSecurityManager(final SecurityManager manager)
    {
        parent = manager;
    }

    public void checkExit(int status)
    {
        throw new AttemptToExitException(status);
    }

    public void checkPermission(Permission perm)
    {
    }
}

然后在代码中,如下所示:

catch(final Throwable ex)
{
    final Throwable cause;

    if(ex.getCause() == null)
    {
        cause = ex;
    }
    else
    {
        cause = ex.getCause();
    }

    if(cause instanceof AttemptToExitException)
    {
        status = ((AttemptToExitException)cause).getStatus();
    }
    else
    {
        throw cause;
    }
}

assertEquals("System.exit must be called with the value of " + expectedStatus, expectedStatus, status);


 类似资料:
  • 问题内容: 在TDD(测试驱动开发)开发过程中,如何处理测试数据?假设有一个场景,解析日志文件以获取所需的列。对于强大的测试,我该如何准备测试数据?对我来说,将此类文件定位到测试类文件是否正确? 问题答案: 例如,Maven对用于处理测试数据的文件夹结构使用约定: 如果您使用maven进行构建,则需要将测试资源放置在正确的文件夹中,如果您使用其他内容进行构建,则您可能希望使用此结构,因为它不仅仅是

  • 背景: 我目前正在开发一个应用程序,该应用程序使用Spring Batch读取一组文件并将文件的内容缓存在内存中。缓存的数据然后由划分为不同类的业务逻辑层使用,每个类通过使用缓存中的数据执行特定的业务功能。 要求: 我被分配了对业务逻辑层进行单元测试的任务。由于业务逻辑层假设数据将在缓存中可用,所以在测试业务逻辑类之前,我需要一种在单元测试中触发Spring批处理作业的方法。 问题是: 我正在考虑

  • 问题内容: 我想为GUI编写测试用例。我想知道如何模拟JButton的单击,或者如何提取JTable的元素。 为此,我构建了一个简单的GUI,如果单击按钮并且JTextfield为空,则将计数增加1,但是如果提供了数字,则计数将被JTextfield中的整数代替。当然,我想使用Regex来确保输入到JTextfield中的文本实际上是整数,但是让我们假设用户不会四处乱逛并输入非整数。另外,当JTa

  • 以下测验提供了与JUnit Framework相关的多项选择题(MCQ)。 您必须阅读所有给定的答案并单击正确的答案。 如果您不确定答案,则可以使用“ Show Answer按钮Show Answer 。 您可以使用“ Next Quiz按钮在Next Quiz中检查新的问题集。 问题1 - 关于JUnit,以下哪项是正确的? A - JUnit测试可以组织成包含测试用例甚至其他测试套件的测试套件

  • 我正在使用Eclipse中的 JUnit5位于modul-path上,并且在module-info.Java中是必需的。 当我尝试运行代码时,总是会收到以下消息: 初始化引导层java.lang.module.findException时出错:无法为C:\users\tim hp.p2\pool\plugins\org.junit.jupiter.migrationsupport_5.0.0.v2

  • 我正在学习JUnit测试。我想在JUnit中测试getter和setter,但它不起作用。这是第一节课。 我需要如何更改以测试setter?我如何测试它?