Security Managerを使わずにSystem.exit()を含むコードをテストしたい
今回はJavaのテストのお話です.System.exit()を含むコードをテストする場合,System.exit()を実行した時点でテストそのものも終了してしまうため,そのままだと正しくテストを実行できないという問題があります.この問題の対処法の一つとして,SecurityManagerクラスを使う方法があります.この方法では,SecurityManagerクラスのcheckExitメソッドをオーバーライドすることで,System.exit()を実行してもテストを終了しないようにすることができます.しかし,Security Managerの使用は現在非推奨であり,代わりにどのようにテストを実行すればよいのかという問題があります.
調べた限りでは,代替となる処理は見つかりませんでした.しかし,JEP 411では以下のように述べられています.
We plan to deprecate and attenuate the capabilities of the Security Manager over a number of releases, simultaneously creating alternative APIs for such tasks as blocking System::exit and other use cases considered important enough to have replacements.
これを見て分かる通り,Security Managerに関連するクラスやメソッドのうち,重要である機能に関しては代替となるものが提供される予定であるようです.これに関しては機能提供を待つしかないということでしょうか...
もし,この記事を読まれた方で,Security Managerを使わずにSystem.exit()を含むコードをテストする方法をご存知の方がいらっしゃいましたら,ぜひ教えていただけると幸いです.