在使用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