相关疑难解决方法(0)

Java:如何测试调用System.exit()的方法?

我有一些方法可以调用System.exit()某些输入.不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新线程中似乎没有帮助,因为System.exit()终止JVM,而不仅仅是当前线程.是否有任何常见的处理方式?例如,我可以替换存根System.exit()吗?

[编辑]有问题的类实际上是一个命令行工具,我试图在JUnit中测试.也许JUnit根本不适合这份工作?建议使用补充回归测试工具(最好是与JUnit和EclEmma完美集成的东西).

java junit multithreading unit-testing testability

187
推荐指数
9
解决办法
8万
查看次数

为什么我的NullPointerException没有被我的catch块捕获?

我有一个线程,我在一个大的,无所不包的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实现的笨拙,但我不禁觉得我只是错过了一些东西.

澄清是为了避免怀疑(因为示例代码明显改变了我的生产代码)

  • run方法中没有try/catch/finally块之外的任何内容.
  • 每个块的开头都有一个System.out.println - 这些控制台语句后面的内容应该无关紧要.

java exception try-catch java-wireless-toolkit java-me

4
推荐指数
2
解决办法
1万
查看次数