我正在修复一个目前崩溃的JNI调用。为了成为一名好的TDD从业者,我创建了一个JUnit测试来复制这个问题,并且它成功地完成了这个任务。
然而,由于崩溃,JNI调用永远不会返回。是否可能编写一个在JNI崩溃时报告失败的JUnit测试?
我正在修复一个目前崩溃的JNI调用。为了成为一名好的TDD从业者,我创建了一个JUnit测试来复制这个问题,并且它成功地完成了这个任务。
然而,由于崩溃,JNI调用永远不会返回。是否可能编写一个在JNI崩溃时报告失败的JUnit测试?
如果你的JNI导致JVM崩溃,那么从junit进行测试肯定会很困难。例如,你无法为SIGSEGV挂钩信号处理程序,JVM只会崩溃。
如果是我,我会做一些改变,创建一个简单的Java类,带有调用崩溃的本地代码的Main方法,然后在我的junit测试中,使用Runtime#exec执行一个运行该包装类的新Java运行时实例。
然后你可以等待生成的进程完成并检查它的返回码——如果返回码非零,则表示执行出现问题。
尝试使用超时参数:http://junit.sourceforge.net/javadoc/org/junit/Test.html 如果您正在使用junit 4,否则可以使用类似于:http://netbeans.org/kb/docs/java/junit-intro.html#Exercise_243