我有一个添加关闭钩子的方法。我需要测试(通过JUnit)钩子中执行的代码被调用:
public void myMethod(){
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
... code to test ...
}
});
}
如何在单元测试中模拟关机?
答案 0 :(得分:6)
我认为你无法测试它。相反,只需测试您的代码在调用时的行为是否正确(通过单独单独测试)。然后,相信Java将在合适的时间调用您的代码。
即。将您的代码提取到一个扩展Thread
的单独类中,并通过在单元测试中执行run()
来测试行为。
答案 1 :(得分:0)
除了 Duncans 的回答之外,我还想指出 Runtime.getRuntime().removeShutdownHook(Thread)
方法。它的布尔返回值指示相应线程之前是否是已注册的钩子。
因此,可以测试钩子的 run()
方法是否作为测试的一部分正确执行。
作为第二部分,可以调用 Runtime.getRuntime().removeShutdownHook(Thread)` 并断言该线程实际上已注册为钩子。
这两项测试共同确保了关闭挂钩的整体功能。