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

我正在为现有的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);

以上是 在JUnit测试中处理System.exit(0) 的全部内容, 来源链接: utcz.com/qa/411651.html

回到顶部