15

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

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

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

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

4

2 回答 2

10

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

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

于 2013-05-21T13:09:12.040 回答
0

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

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

这两个测试一起确保了关闭挂钩的整体功能。

于 2021-07-09T10:12:20.703 回答