SimpleJdbcDaoSupport を拡張するクラスが与えられた場合、SimpleJdbcTemplate をどのようにモックできますか?
public class SimpleJdbcDaoSupportExtension extends SimpleJdbcDaoSupport {
public SimpleJdbcDaoSupportExtension (JdbcTemplate jdbcTemplate){
super.setJdbcTemplate(jdbcTemplate);
}
public MyDomainObj getResult(){
SimpleJdbcTemplate sjdbc = getSimpleJdbcTemplate();
MyDomainObj result = sjdbc.query(*whatever necessary args*.);
return result;
}
}
次に、Mockito を使用します。
public class Test {
@Mock private JdbcTemplate mockedJdbcTemplateDedendency;
private SimpleJdbcDaoSupportExtension testObj;
@Before
public void doBeforeEachTestCase() {
MockitoAnnotations.initMocks(this);
SimpleJdbcDaoSupportExtension sje = new SimpleJdbcDaoSupportExtension (mockedJdbcTemplateDedendency);
}
@Test
public final void test(){
when(mockedJdbcTemplateDedendency.query("what to query").thenReturn(new MyDomainObj());
}
}
モックされた JdbcTemplate が注入されますが、dao クラスは SimpleJdbcTemplate に依存してクエリを作成し (オブジェクトへのマッピング用)、SimpleJdbcDaoSupport によって内部的に構築されるため、JdcbTemplate をモックしても SimpleJdbcTemplate には影響しません。パブリック セッターがなく、SimpleJdbcTemplate を信頼する唯一の方法は、そのメソッド getSimpleJdbcObject() に依存することです。