使用Spring测试在测试中提交事务

时间:2014-09-20 08:53:51

标签: spring spring-transactions transactional spring-test spring-test-dbunit

我正在测试我的存储库以进行更新操作

@Test

    public void updateStatusByEmailWithEmailCustomer()
    {
        customerQuickRegisterRepository.save(standardEmailCustomer());

        assertEquals(CUST_STATUS_EMAIL,customerQuickRegisterRepository.findByEmail(CUST_EMAIL).getStatus());

        customerQuickRegisterRepository.updateStatusByEmail(CUST_EMAIL,STATUS_EMAIL_VERFIED ); 

        assertEquals(STATUS_EMAIL_VERFIED,customerQuickRegisterRepository.findByEmail(CUST_EMAIL).getStatus());
    }

在测试用例中,我将我的实体保存为默认状态,之后我使用updateStatusByEmail(CUST_EMAIL,STATUS_EMAIL_VERFIED)将其更改为其他实例,但仍然是下一个assert语句失败,这是因为测试执行期间的更新在完成测试后提交....有什么方法可以在测试中提交我的更改?

1 个答案:

答案 0 :(得分:1)

您可以使用刷新底层Hibernate Session,因为这会将您的更改推送到数据库中的基础表(在当前的测试管理事务中)。 / p>

在Spring参考手册的testing chapter中搜索“误报”以获取详细信息。

基本上,您需要在更新调用之后和相应的断言之前,在当前 Hibernate flush()上调用Session

如果这不能解决您的问题,使用Spring Framework 4.1,您可以在测试中使用新的TestTransaction API programmatic transaction management

此致

Sam(spring-test模块的负责人)