JUnit4:测试一个关闭钩子

时间:2013-05-21 13:03:28

标签: java junit application-shutdown

我有一个添加关闭钩子的方法。我需要测试(通过JUnit)钩子中执行的代码被调用:

public void myMethod(){
    Runtime.getRuntime().addShutdownHook(new Thread() {

        @Override
        public void run() {
            ... code to test ...
        }
    });
}

如何在单元测试中模拟关机?

2 个答案:

答案 0 :(得分:6)

我认为你无法测试它。相反,只需测试您的代码在调用时的行为是否正确(通过单独单独测试)。然后,相信Java将在合适的时间调用您的代码。

即。将您的代码提取到一个扩展Thread的单独类中,并通过在单元测试中执行run()来测试行为。

答案 1 :(得分:0)

除了 Duncans 的回答之外,我还想指出 Runtime.getRuntime().removeShutdownHook(Thread) 方法。它的布尔返回值指示相应线程之前是否是已注册的钩子。

因此,可以测试钩子的 run() 方法是否作为测试的一部分正确执行。 作为第二部分,可以调用 Runtime.getRuntime().removeShutdownHook(Thread)` 并断言该线程实际上已注册为钩子。

这两项测试共同确保了关闭挂钩的整体功能。