我有一些应调用System.exit()某些输入的方法。不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新的Thread中似乎无济于事,因为System.exit()终止JVM不仅终止当前线程。有什么通用的模式可以处理吗?例如,我可以用存根替换System.exit()吗?
System.exit()
[编辑]有问题的类实际上是我要在JUnit中测试的命令行工具。也许JUnit根本不是适合该工作的工具?欢迎提出补充回归测试工具的建议(最好是与JUnit和EclEmma很好地集成在一起的工具)。
库系统规则具有一个称为ExpectedSystemExit的JUnit规则。使用此规则,你可以测试调用System.exit(...)的代码:
ExpectedSystemExit
System.exit(...
public void MyTest { @Rule public final ExpectedSystemExit exit = ExpectedSystemExit.none(); @Test public void systemExitWithArbitraryStatusCode() { exit.expectSystemExit(); //the code under test, which calls System.exit(...); } @Test public void systemExitWithSelectedStatusCode0() { exit.expectSystemExitWithStatus(0); //the code under test, which calls System.exit(0); } }