JUnit4:测试一个关机钩子被调用

2022-09-03 15:33:45

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

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

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

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


答案 1

我不认为你能够测试这一点。相反,只需测试代码在调用时的行为是否正确(通过单独对其进行单元测试)。然后,相信 Java 会在正确的时间调用您的代码。

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


答案 2

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

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

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


推荐