验证场景的事务性Spring Junit4测试用例



我使用Spring,JPA使用hibernate作为service -> dao层。事务是spring管理的。我有一个验证测试用例,其中我需要验证重复数据插入并抛出异常。

在我的测试用例中,它扩展到AbstractTransactionalJUnit4SpringContextTests

我已经配置了@TransactionConfiguration与defaultRollback作为true和bean名称的事务管理器(在我的情况下,它的bean的JpaTransactionManager)

我按照以下步骤执行这个测试用例

  1. 通过调用dao.create(entity)创建记录;(这将成功)

  2. 创建一个相同的记录(与步骤1中设置的所有属性相同)并调用dao.create(entity)(这必须失败,但它没有失败)

  3. 在我的create(entity)方法中,我调用validate()方法,它触发标量对象查询(JPQL)来验证。

我希望验证失败,但这没有例外,重复的数据被插入到DB中。

我尝试调试(启用hibernate日志),我发现选择查询(标量查询)无法获得适当的数据(理想情况下,它应该获取至少1条记录,因为我在上面列出的第1步中为它插入了数据)

我在日志中看到Insert query for step1,然后选择query for validation.

是否有其他的方法来编写这样的场景,涉及到spring/jpa与hibernate的测试用例?

请发表你的观点

提前感谢!!

您可以粘贴您的测试在这里,我相信每个测试都在自己的事务中运行,并且您将defaultRollback设置为true。

最新更新