如何获得了在JUnit测试情况传递给Runtime.getRuntime.exit(值)值(How

2019-10-17 00:27发布

我必须写一个测试案例JUnitClass可以把它叫做C1其内部调用Runtime.getRuntime.exit(somevalue)

C1有一个main ,它接受了一些方法arguments和创建CommandLine ,然后根据传入arguments做了具体任务。

现在执行调用后,所有任务Runtime.getRuntime.exit(somevalue) 。 所述somevalue定义任务是否已成功执行(意味着someValue中为0),或有错误(意味着someValue中为1)。

有见及此JUnit测试情况下,我必须得到这个somevalue ,并检查它是否是期望somevalue与否。

我如何获得somevalue的JUnit测试案例。

Answer 1:

您可以覆盖安全管理器捕捉到退出代码,如果你使用一个模拟框架会比较简洁:

@Test
public void when_main_is_called_exit_code_should_be_1() throws Exception {
    final int[] exitCode = new int[1];
    System.setSecurityManager(new SecurityManager() {
        @Override
        public void checkExit(int status) {
            exitCode[0] = status;
            throw new RuntimeException();
        }});

    try { main(); } catch(Exception e) {}

    assertEquals(exitCode[0], 1);
}

public static void main() {
    System.exit(1);
}


文章来源: How to get the value that is passed to Runtime.getRuntime.exit(value) in a JUnit test case