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

在JUnit测试中,直接调用System.exit()会导致测试终止。一种解决方案是使用安全管理器来捕获并阻止System.exit(),或者利用如System Rules库中的ExpectedSystemExit规则来测试System.exit()的调用。这样可以确保测试正常执行并且能够验证System.exit()的行为。
摘要由CSDN通过智能技术生成

问题

我有一些方法应该在某些输入上调用567779278。不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新线程中似乎没有帮助,因为System.exit()终止了JVM,而不仅仅是当前线程。是否有任何常见的处理方式?例如,我可以将存根替换为System.exit()吗?

[编辑]有问题的类实际上是一个命令行工具,我试图在JUnit中测试。也许JUnit根本不适合这份工作?建议使用互补回归测试工具(最好是与JUnit和EclEmma完美集成的东西)。

#1 热门回答(184 赞)

事实上,Derkeiler.comsuggests:

为什么选择System.exit()?

而不是使用System.exit(whateverValue)终止,为什么不抛出未经检查的异常?在正常使用中,它会一直漂移到JVM的最后一个捕获器并关闭你的脚本(除非你决定在途中捕获它,这可能在某一天有用)。在JUnit场景中,它将被JUnit框架捕获,该框架将报告此类测试失败并顺利地移动到下一个。

防止System.exit()实际退出JVM:

尝试修改TestCase以使用安全管理器运行,该管理器阻止调用System.exit,然后捕获SecurityException。

public class NoExitTestCase extends TestCase

{

protected static class ExitException extends SecurityException

{

public final int status;

pub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值