我有一些方法可以调用System.exit()某些输入.不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新线程中似乎没有帮助,因为System.exit()终止JVM,而不仅仅是当前线程.是否有任何常见的处理方式?例如,我可以替换存根System.exit()吗?
[编辑]有问题的类实际上是一个命令行工具,我试图在JUnit中测试.也许JUnit根本不适合这份工作?建议使用补充回归测试工具(最好是与JUnit和EclEmma完美集成的东西).
我有一个线程,我在一个大的,无所不包的catch块中捕获所有错误.我这样做,以便我可以在我的应用程序中报告任何错误,而不仅仅是预期的错误.我的Runnable看起来像这样:
public final void run()
{
try
{
System.out.println("Do things"); /* [1] */
doUnsafeThings();
}
catch (Throwable t)
{
System.out.println("Catch"); /* [2] */
recover();
}
finally
{
System.out.println("Finally"); /* [3] */
}
}
Run Code Online (Sandbox Code Playgroud)
我希望NPE能被Throwable catch块捕获.相反,不打印[2]处的输出,也不打印[3].打印[1]处的输出.
我在控制台上得到的是:
Uncaught exception java/lang/NullPointerException.
Run Code Online (Sandbox Code Playgroud)
这到底是怎么回事?
对于法庭记录,我正在使用J2ME,这是在Sun的WTK v2.5.2模拟器中运行的.
我很想把它归结为JVM实现的笨拙,但我不禁觉得我只是错过了一些东西.
澄清是为了避免怀疑(因为示例代码明显改变了我的生产代码)