【问题标题】:Mocking Db in Java Unit tests在 Java 单元测试中模拟 Db
【发布时间】:2016-07-26 14:57:49
【问题描述】:

我正在尝试在我的服务层中的一个方法中对该代码块进行单元测试。 谁能建议我可以(/应该)在这里测试什么以及如何测试它们(尤其是插入到 db 部分)。任何指针(/example code/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);
    }
}

【问题讨论】:

  • 你拥有 DAO 代码还是它是专有的?
  • 你能分享iplDAO是如何创建/初始化的吗?
  • @Compass 是的,我们拥有 DAO 代码 - 它创建如下:'public class IPLDAO extends BaseDAO implements TTDAO { At-Autowired private ITXXDAO txxDao; At-Override public int loadGames(..) { return id; } At-Override public boolean insertPartyDetails(a, b, c) { return x; } }' 并且在服务类中它的 Autowired

标签: java unit-testing mocking


【解决方案1】:

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

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

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

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

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

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

有很多 Java mocking libraries 可供选择,并且都有很好的文档记录,但 this blog post 是一个很好的起点。

【讨论】:

  • 谢谢 - 所以你建议测试那些到 dao 调用?现在我的问题是如何测试 iplDAO.insertPartyDetails(iplPartyDetailsVO, id,batchVO.getId());没有实际插入? (数据库模拟可以帮助吗?如果可以,请给我举个例子)
  • @user2666282 通过在您的类中使用模拟 iplDAO 对象(例如通过使用 Mockito 库),您正在替换“真正的”iplDAO 对象通常所做的事情(可能是读取和插入数据库)。所以不会与数据库交互。如果您发布整个课程,那么举个例子会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
相关资源
最近更新 更多