当测试碰到system.exit()

我们可能会碰到需要被测试的代码里面包含了system.exit()语句,我们只想退出当前测试用例,并不想退出整个测试(后面还有很多测试没跑).

下面是解决办法,直接贴代码

   protected static class ExitException extends SecurityException {

        public final int status;

 

        public ExitException(int status) {

            super("There is no escape!");

            this.status = status;

        }

    }

 

    private static class NoExitSecurityManager extends SecurityManager {

        public void checkPermission(Permission perm) {

            // allow anything.

        }

 

        public void checkPermission(Permission perm, Object context) {

            // allow anything.

        }

 

        @Override

        public void checkExit(int status) {

            super.checkExit(status);

            throw new ExitException(status);

        }

    }

 

    @Override

    protected void setUp() throws IOException {

                  //通过该语句指定程序退出时的安全检查程序,我们可在里面动手脚

        System.setSecurityManager(new NoExitSecurityManager());

        overwriteLogFile("");

    }

 

    @Override

    protected void tearDown() throws IOException {

        System.setSecurityManager(null);

    }

 

        

    /**

     * Accuracy test for <code>main(String[])</code>. Tests situation when the

     * usage message should be given.

     *

     * @throws IOException

     *             to JUnit

     */

    public void test_main_Accuracy() throws IOException {

        String[] args = { "-help" };

        try {

            GLUIJobsDaemon.main(args);

  //程序退出时会执行NoExitSecurityManager里的方法(System.setSecurityManager(new 

  //  NoExitSecurityManager());

  //我们在checkExit方法时抛出异常ExitException 而不真正退出,随后异常被捕捉,见下面

        } catch (ExitException e) {

            assertEquals("Exit status should be right", 0, e.status);

        }

    }

 

转载于:https://www.cnblogs.com/ITEagle/archive/2010/07/10/1774878.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
System.exit是Java中的一个方法,用于终止当前正在运行的Java虚拟机。根据传入的参数不同,System.exit可以实现正常终止和异常终止两种状态的退出。当参数为0时,即System.exit(0),表示程序正常退出。而当参数为非零的整数时,即System.exit(非零的int型参数),表示程序异常退出。\[1\]\[2\] 正常终止和异常终止的区别在于使用场景的不同。正常终止一般用于程序按照预期执行完毕后需要停止程序的情况,而异常终止一般用于捕获到异常后需要立即停止程序的情况。例如,在一个if-else判断中,如果程序按照预期执行到最后需要停止程序,可以使用System.exit(0);而如果捕获到异常后需要停止程序,可以使用System.exit(1)。\[1\] 举个例子,假设我们有一个Java类名为test,其中使用了try-catch语句。在try块中进行除法运算,如果输入的除数为0,则会抛出ArithmeticException异常,并执行catch块中的代码。在catch块中,可以输出异常信息并使用System.exit(-1)来异常终止程序。\[2\]\[3\] 总之,System.exit方法可以用于终止当前正在运行的Java虚拟机,根据传入的参数不同可以实现正常终止和异常终止两种状态的退出。具体使用哪种状态的退出取决于使用场景的需求。 #### 引用[.reference_title] - *1* [java终止程序语句总结 System.exit(1)、System.exit(0)、return;break;continue;](https://blog.csdn.net/mingtiandejueze/article/details/83388043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [System.exit()方法的详解](https://blog.csdn.net/qq_40474507/article/details/119116506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值