解决dao层单元测试问题

其实问题已经存在很久,自从使用了Open Session In Test模式后,dao的单元测试就出现了奇怪行为——数据的修改操作不能提交事务,由此导致了一些"违反唯一约束条件"的错误。

由于当时只有一个测试报了错,我就偷懒把它屏蔽掉了。

由于最近老给同事们讲单元测试、要求他们严格测试,越发觉得心虚了,于是决定把欠下的账还上。

昨天下午一直鼓捣到8点多了,越改越乱,还是找不到原因,情绪很低落。

今天重新振作精神,一个小时就搞定了,哈哈哈哈

原来,事情是这样的:

protected void setUp() throws Exception {
    log = LogFactory.getLog(WorkflowDriverDAOTest.class);
    super.setUp();

    dao = (WorkflowDriverDAO) ctx.getBean("workflowDriverDAO");

    ............

    dao.saveWorkflowDriver(wd);
}

protected void tearDown() throws Exception {
    try {
      dao.removeWorkflowDriver(wd.getFlowDriverID());
    }
    catch (Throwable d) {
      log.error(">>>>>" + d.getMessage());
    }
    super.tearDown();
    dao = null;
}

黑体字那句话总是不能提交事务,结果就是插入的多个WorkflowDriver的WriteURL重复了,导致"违反唯一约束条件"错误。

可是更奇怪的是,并不是每个测试都错,而且报错位置总在一个查询方法调用处,我灵机一动:难道查询的操作会导致之前的那些更新操作提交?

一试验,果然如此,于是我在tearDown里面的删除操作后面加了一个查询的操作,问题就解决了。

protected void tearDown() throws Exception {
    try {
      dao.removeWorkflowDriver(wd.getFlowDriverID());

      log.debug("Drivers num[" + dao.getAllWorkflowDrivers().size() + "]");
    }
    catch (Throwable d) {
      log.error(">>>>>" + d.getMessage());
    }
    super.tearDown();
    dao = null;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值