我需要确定一个类的特定方法在收到终止信号时是否被调用。此方法执行一些清理操作,在关闭 Hook 中调用。
我尝试使用 EasyMock 期望在执行启动此类的主要方法的 Process 之后调用此方法,然后调用 Process destroy 方法作为测试操作的一部分,但不知何故此类的 mock 未连接到我启动的进程。
如何测试类的方法是否在收到关闭信号时被调用?我想这样做而不必为了测试类而修改类的实现。
最佳答案
JVM 负责执行已向其注册的关闭 Hook 。由于您不是 JVM 的开发人员,因此您必须相信它会正确地做到这一点。所以你会想测试你的关闭钩子(Hook)是否已经注册。您可以通过检查 removeShutdownHook
的返回值来做到这一点。但是有一个实际问题:您可能不想在 JUnit 退出时运行关闭 Hook ,因此您不应该在经过单元测试的代码中注册关闭 Hook 。所以我认为你做不到。
您能做的最好的事情就是对您的关闭 Hook 使用的代码进行单元测试。
关于testing - 系统关闭时调用的 JUnit 测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605801/