Учитывая класс, который расширяет 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 - mocking JdcbTemplate не влияет на SimpleJdbcTemplate. Итак, как это сделать, когда для него нет открытых сеттеров, и единственный способ заставить SimpleJdbcTemplate доверять этому - это использовать метод getSimpleJdbcObject ()?