在Java单元测试中模拟Db

时间:2016-07-26 14:57:50

标签: java unit-testing mocking

我正在尝试在我的服务层中的方法中对此代码块进行单元测试。 任何人都可以建议我可以(/应该)在这里测试什么以及如何测试它们(特别是插入数据库部分)。任何指针(/示例代码/ doc)都会非常有用。

if (element != null) {
    id = iplDAO.loadGames(element, batchVO.getId());
    iplPartyDetailsVO = element.getParty();
    if iplPartyDetailsVO != null) {
    try {
        iplDAO.insertPartyDetails(iplPartyDetailsVO, id, batchVO.getId());
    } catch (Exception e) {

        logger.logp("className");
        String err = "blah";
        iplDAO.insertIntoError(err_t);
    }
}

1 个答案:

答案 0 :(得分:0)

我认为您可能会将测试与模拟混淆,如果您尝试为此服务层代码编写测试,那么您需要确定您的期望是什么,例如:

  • 从数据源加载一些游戏
  • 保存一些东西(在你的代码中不清楚你实际上正在保存什么,但是编写一些单元测试可能会使这更加明显)。

因此,如果这些 是您对代码的期望,那么您需要编写一个可以验证它们已被满足的测试。

这意味着您正在调用mocking the dependency(在您的情况下是iplDAO对象),以便每个方法调用都返回一些可用于测试您的功能的内容 - 在您的情况下这两个调用:

 iplDAO.loadGames(element,batchVO.getId())

iplDAO.insertPartyDetails(iplPartyDetailsVO, id,batchVO.getId());

有很多Java mocking libraries可供选择,但它们都有详细记录,但this blog post是一个很好的起点。