给定一个扩展 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()?