真夜中の色彩

真夜中の雰囲気が好きなプログラマのブログ

privateなものを強制的にアクセス!

JUnitで単体テストしているときに、getter/setterがなかったり、setterがprivateだったりしてテスト用の初期値を与えるのが難しい場面があったりする。
そのprivateなメンバに対して強制的にアクセスする方法。
このサイトを取っ掛かりにさせてもらいました。

java.lang.reflection.AccessibleObjectクラスを利用すれば、したいことは出来るみたいですね。
フィールドならField
メソッドならMethod
コンストラクタならConstructor

JUnit-addonsっていうのにはこの機能を持つアドオンがあるみたいですが、個人的にはソース書いている方が好きなので…。

ただ、AccessibleObjectクラスにも難点があるようです。
【見覚え】koichikのひとりごと【あります】 AccessibleObject#setAccessible(boolean)

私の場合、今回のテストでは問題なさそうではあるけれど、こういうリスクもあることを念頭に入れねばなさそう。