使用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());
  }

i使用上述方法将数据加载进行集成测试。不幸的结果列表的大小约为300000个数据行。

对于我的测试,只能使用100个数据行工作。因此,我写了一个仅返回100行的SQL测试文件(键lad_test):

SELECT 
*
FROM 
DOG
WHERE 
TO_CHAR(sell, 'dd.mm.yy') = TO_CHAR(:jdate,'dd.mm.yy')
and rownum <= 100

我的问题是,无论如何我都可以在不更改生产代码的情况下 final String lSql = readSqlQuery("LAD"); ???

来测试SQL(LAD_TEST)而不是真实的生产SQL(LAD)

我在我的测试阶段中使用了jmockit,但是我所说的那个dao class(mdogdao)不是嘲笑的...

我测试的呼叫:

List<Dog> lAllDog = mDogDao.loadAllDog(lNow.getTime());

有什么办法可以使用Jmockit而不嘲笑mdogdao?

一些建议?谢谢Stefan

您可以模拟NamedParameterJdbcTemplate类并记录期望,因此query(...)方法返回您所需的测试数据。

为什么要在单元测试中查询实时数据库?

我一直做的是对抗单独的单元测试数据库架构或内存数据库。这样,我确定查询中的错误不会影响其他人使用的数据。

即使您需要一定量的测试数据,也可以在测试之前插入数据的提取物并之后进行清理。

此外,

您的单位测试也是孤立进行的。如果一个测试修改数据,则您的其他测试不会遭受可能的后果。

最新更新