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