我必须在JUnit
中为Class
编写一个测试用例,让我们称之为C1
,内部调用Runtime.getRuntime.exit(somevalue)
。
班级C1
有一个main
方法接受一些arguments
并创建一个CommandLine
,然后根据传递的arguments
执行特定任务
现在执行完所有任务后调用Runtime.getRuntime.exit(somevalue)
。 somevalue
定义任务是否成功执行(意味着某些值为0)或有错误(意味着某些值为1)。
在JUnit测试案例中,我必须得到somevalue
并检查它是否是所需的somevalue
。
如何在JUnit测试用例中获得somevalue
。
答案 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);
}