I have a method which adds a shutdown hook. I need to test (via JUnit) that the code executed in the hook is called :
public void myMethod(){
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
... code to test ...
}
});
}
How can I simulate a shutdown in my unit test ?
getRuntime(). removeShutdownHook(Thread) method. Its boolean return value indicates if the respective thread was a registered hook previously. Thus, one can test if the hook' run() method performs correctly as one part of a test.
Shutdown hooks are called when the application terminates normally (when all threads finish, or when System. exit(0) is called).
A shutdown hook is simply an initialized but unstarted thread. When the virtual machine begins its shutdown sequence it will start all registered shutdown hooks in some unspecified order and let them run concurrently.
I don't think you'll be able to test that. Instead, just test that your code behaves correctly when invoked (by unit testing it separately). Then, trust that Java will invoke your code at the right time.
I.e. extract your code into a separate class that extends Thread
and test the behaviour by executing run()
in a unit test.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With