我的 Dao 类中有一个方法,如下所示:
@Override
public List<Dog> loadAllDog(Date pDate) {
final MapSqlParameterSource lParameterSource = new MapSqlParameterSource();
lParameterSource.addValue("jdate", pDate);
final String lSql = readSqlQuery("LAD");
final NamedParameterJdbcTemplate lTemplate = createNamedParameterJdbcTemplate();
return lTemplate.query(lSql, lParameterSource, new DogExtractor());
}
我使用上述方法加载数据进行集成测试。不幸的是,结果列表的大小约为 300000 数据行。
对于我的测试,仅处理 100 个数据行就可以了。所以我写了一个 SQL 测试文件(Key LAD_TEST),它只返回 100 行:
SELECT
*
FROM
DOG
WHERE
TO_CHAR(sell, 'dd.mm.yy') = TO_CHAR(:jdate,'dd.mm.yy')
and rownum <= 100
我的问题是,我可以无论如何包含测试sql(LAD_TEST)而不是真正的生产sql(LAD)而不更改此处的生产代码final String lSql = readSqlQuery(“LAD”);
???
我在我的测试类中使用jmockit,但是我正在谈论的dao类(mDogDao)没有被 mock ......
我的测试调用:
List<Dog> lAllDog = mDogDao.loadAllDog(lNow.getTime());
有什么方法可以使用 jmockit 来管理这个而不模拟 mDogDao 吗?
有什么建议吗? 谢谢 斯特凡
最佳答案
您可以模拟 NamedParameterJdbcTemplate
类,并记录期望,以便 query(...)
方法返回您想要的测试数据。
关于java - 使用jmockit模拟扩展类的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21608074/