在使用TestNG做单元测试时,需要测试的代码中出现System.exit(0),导致单元测试还未结束程序就停止了。解决方法如下:
public class TestMain { public static void main(String args[]) { NoExitSecurityManager manager = new NoExitSecurityManager(); System.setSecurityManager(manager); new TestNGApp("test/TestUtils.xml").run(); manager.exitFilter = false; System.exit(0); } /** * 拦截系统退出 */ private static class NoExitSecurityManager extends SecurityManager { boolean exitFilter = true; @Override public void checkPermission(Permission perm) { } @Override public void checkPermission(Permission perm, Object context) { } @Override public void checkExit(int status) { super.checkExit(status); if (exitFilter) { throw new ExitException(status); } } } protected static class ExitException extends SecurityException { private static final long serialVersionUID = 1L; public final int status; public ExitException(int status) { super("成功拦截System.ext(0)!"); this.status = status; } }}
参考: