如何获取在JUnit测试用例中传递给Runtime.getRuntime.exit(value)的值

时间:2012-07-16 13:14:00

标签: java junit runtime runtime.exec

我必须在JUnit中为Class编写一个测试用例,让我们称之为C1,内部调用Runtime.getRuntime.exit(somevalue)

班级C1有一个main方法接受一些arguments并创建一个CommandLine,然后根据传递的arguments执行特定任务

现在执行完所有任务后调用Runtime.getRuntime.exit(somevalue)somevalue定义任务是否成功执行(意味着某些值为0)或有错误(意味着某些值为1)。

在JUnit测试案例中,我必须得到somevalue并检查它是否是所需的somevalue

如何在JUnit测试用例中获得somevalue

1 个答案:

答案 0 :(得分:3)

您可以覆盖安全管理器以捕获退出代码,如果您使用模拟框架,它将更简洁:

@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);
}