在使用TestNG作单元测试时,须要测试的代码中出现System.exit(0),致使单元测试还未结束程序就中止了。解决方法以下:html
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; } } }
参考:https://stackoverflow.com/questions/309396/java-how-to-test-methods-that-call-system-exitjava
http://coding.derkeiler.com/Archive/Java/comp.lang.java.programmer/2008-04/msg02603.htmlide