【发布时间】:2011-06-14 13:58:25
【问题描述】:
我正在修复一个当前崩溃的 JNI 调用。为了成为一名优秀的 TDD 实践者,我创建了一个 JUnit 测试来复制该问题,结果令人钦佩。
但是,由于崩溃,JNI 调用永远不会返回。是否可以编写一个在 JNI 崩溃时报告失败的 JUnit 测试?
【问题讨论】:
标签: junit java-native-interface integration-testing
我正在修复一个当前崩溃的 JNI 调用。为了成为一名优秀的 TDD 实践者,我创建了一个 JUnit 测试来复制该问题,结果令人钦佩。
但是,由于崩溃,JNI 调用永远不会返回。是否可以编写一个在 JNI 崩溃时报告失败的 JUnit 测试?
【问题讨论】:
标签: junit java-native-interface integration-testing
哎呀,如果您的 JNI 使 JVM 崩溃,那么从 junit 测试肯定会很困难。例如,你不能为 SIGSEGV 连接一个信号处理程序,JVM 就会死掉。
如果是我,我会稍微改变一下,并创建一个简单的 Java 类,其 Main 调用崩溃的本机代码,在我的 junit 测试中,我将执行一个运行该 Java 运行时的新实例使用 Runtime#exec 的包装类。
然后您可以等待生成的进程完成并检查其返回码 - 如果它不为零,则执行中有问题。
【讨论】:
尝试使用超时参数:http://junit.sourceforge.net/javadoc/org/junit/Test.html,如果您使用的是 junit 4,否则类似:http://netbeans.org/kb/docs/java/junit-intro.html#Exercise_243
【讨论】: