【发布时间】:2016-04-15 13:18:53
【问题描述】:
如果我们创建了一个单例对象来处理 Java 异常,为什么 Thread.setDefaultUncaughtExceptionHandler 在 Java 应用程序服务器、Java 控制台应用程序中运行正常但在 JUnit 测试中不起作用?
例如,以下代码有效:
public class Main extends Object {
public static void main(String[] arguments) {
Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler.getInstance());
double a = 1/0;
}
}
但是这个 JUnit 测试不是:
public class UncaughtExceptionHandlerTest {
@Test
public void throwException() {
Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler.getInstance());
double a = 1/0;
}
}
但是为什么呢?而且,我们如何解决这个问题,自动处理所有 JUnit 测试异常,而不对每个测试使用喜怒无常的 try catch?
【问题讨论】:
-
不理解反对票。主要动机是,例如,如果 junit 测试失败,则发送电子邮件或执行其他管理任务。如果我有一个全局异常处理程序,我可以这样做,而不是在每个测试中放置一个 catch 块。处理完之后,也许我会抛出这个异常,让junit照着做。
标签: java junit exception-handling junit4