繁体   English   中英

用jmockit模拟扩展类的抽象方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM