【发布时间】:2014-10-15 12:42:12
【问题描述】:
我的场景如下:
我在SampleDao界面中有no setter methods,在SampleDaoImpl类中有no direct field
参考:How to mock getJdbcTemplate().queryForObject()?
public interface SampleDao {
// some methods
}
public class SampleDaoImpl extends JdbcDaoSupport implements SampleDao {
// implementation of some methods
public String someMethod(String param1, String param2){
// .....//
List<String> data = getJdbcTemplate().query(.....); // -> getJdbcTemplate() is the method of JdbcDaoSupport to get JdbcTemplate
}
}
我想模拟getJdbcTemplate().query(.....) 的结果,其中getJdbcTemplate() 属于JdbcDaoSupport 类,由SampleDaoImpl 扩展,SampleDao 没有。
我的测试用例如下:
创建SampleDaoImpl的对象并分配给SampleDao
@RunWith(Parameterized.class)
public class MockSampleDao {
String param1 = "", param2 = "";
@Mock
SampleDao sampleDao = new SampleDaoImpl();
public MockSampleDao(String param1, String param2) {
super();
this.param1 = param1;
this.param2 = param2;
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ "test1", "test1" },
{ "test2", "test2" }
});
}
@Test
public void testSomeMethod(){
try {
// HOW TO MOCK THE RESULT FROM getJdbcTemplate().query() HERE
sampleDao.someMethod(param1, param2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
JdbcDaoSupport 从哪里获取它从 getJdbcTemplate() 返回的值?也许您可以模拟用于生成该 jdbcTemplate 的对象?