Spring Hibernate 单元测试配置为事务自动回滚时需要提交事务时的处理

Spring、junit、mockito单元测试总结提到单元测试时hibernate事务自动回滚的配置方法,在部分方法使用hibernate调用原生sql或执行hql 的update 或 delete操作时,由于将之前插入测试数据的操作未提交事务,使得这些用例执行失败。

对于上面的问题,经本人测试可以在插入测试数据操作后调用hibernateTemplate的flush和clear方法,将之前操作数据提交后执行,由于配置了事务自动回滚,测试数据不会提交到数据库。

@Test
	public void testRemoveBagPeriodRuleByIds() {
		// 先插入新的记录
		BagPeriodRule bagPeriodRule = getNewBagPeriodRule();
		String dealerIds = "2,3,4";
		int maxId = getMaxId();

		String msg = bagPeriodRuleService.saveBagPeriodRules(bagPeriodRule,
				dealerIds);

		int maxId1 = getMaxId();
		// 保存成功后最大记录Id应该增加
		assertTrue(maxId1 > maxId);

		List<BagPeriodRule> list = findByIdScope(maxId, maxId1);
		assertNotNull(list);

		// 数据库中有相同记录时提示信息不为空
		if ("".equals(msg)) {
			assertTrue(3 == list.size());
		}

		// 获取新插入记录的Id
		StringBuilder periodIds = new StringBuilder();
		for (BagPeriodRule bagPeriodRule2 : list) {
			periodIds.append(bagPeriodRule2.getPeriodId()).append(",");
		}
		
		<span style="color:#FF0000;">bagPeriodRuleDao.flush();</span>
		
		// 调用批量删除方法删除记录
		if (periodIds.length() > 0) {
			bagPeriodRuleService.removeBagPeriodRuleByIds(periodIds.substring(
					0, periodIds.length() - 1));
		}
		<span style="color:#FF0000;">bagPeriodRuleDao.flush();
		bagPeriodRuleDao.clear();</span>
		
		List<BagPeriodRule> list1 = findByIdScope(maxId, maxId1);
		for (BagPeriodRule bagPeriodRule2 : list1) {
			assertTrue(1 == bagPeriodRule2.getIsDelete());
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值