[英]mock abstract method of extended class with jmockit
我的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测试文件(键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)没有被嘲笑...
我测试的电话:
List<Dog> lAllDog = mDogDao.loadAllDog(lNow.getTime());
有没有办法在不模拟mDogDao的情况下使用jmockit进行管理?
一些忠告? 斯蒂芬·史蒂芬(Thx Stefan)
您可以模拟NamedParameterJdbcTemplate
类,并记录期望值,以便query(...)
方法返回所需的测试数据。
为什么要在单元测试中查询实时数据库?
我一直在做的是针对单独的单元测试数据库架构或内存数据库。 这样,我可以确定查询中的错误不会影响其他人使用的数据。
即使您需要一定数量的测试数据,也可以始终在测试之前插入数据摘录,然后再进行清理。
而且,通过这种方式,您的单元测试也可以独立运行。 如果一个测试修改了数据,则其他测试不会遭受可能的后果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.