ReflectionTestUtilsを使用する
fieldの場合
ReflectionTestUtils.setField
を使う
public Sample SampleRepositoryImpl{
private String parameter;
}
@Runwith(SpringRunner.class)
class SampleRepositoryImplTest(){
@InjectMocks
private SampleRepositoryImpl sampleRepository
@Before
public void setUp(){
ReflectionTestUtils.setField(sampleRepository,"parameter","local");
}
}
上記のような感じで、差し替えができる。とても簡単。staticフィールドもできるもよう。
methodの場合
private methodをテストしたいときは、これで結果が取れるので、Assertiosでチェックしてやればいい。
ReflectionTestUtils.invokeMethod
を使う
public Sample SampleRepositoryImpl{
private Sring sampleMethod(){
return "sample";
}
}
@Runwith(SpringRunner.class)
class SampleRepositoryImplTest(){
@InjectMocks
private SampleRepositoryImpl sampleRepository
@Test
public void privateMethodTest(){
ReflectionTestUtils.invokeMethod(sampleRepository,"sampleMethod", null);
}
}
staticメソッドもできるもよう。
まとめ
MockitoでprivateメソッドでテストするのはできなくてPowerMock使えって書いてあるけど、バージョンとか意識しないといけないの面倒だから、Mockitoでできないかなって調べたら、このくらいのことはできるので、わざわざライブラリ追加しなくていいかなって感じでした。