我有一个Spring 3.2应用程序,使用Hibernate和一些JUnit 4测试用例。我使用MySQL 5作为数据库。
在为回滚的DAO类编写测试用例时,测试用例通过。但是,如果我告诉测试用例不回滚(@Rollback(false)),则测试用例失败。因此,我不相信我在defaultRollback = true时传递的测试用例的有效性。
有问题的测试用例是删除具有许多[Team]对象的对象[Company]。 [Team]对象也可以有许多子[Team]对象。
删除[公司]时,它会将删除级联到对象。当它删除[Team]对象时,我没有指定将删除级联到子[Team]对象,因此MySQL会抛出一个外键约束违例异常。测试用例(当它被设置为回滚时),通过!但是,它肯定不是吗?如果在测试用例上将rollback设置为false,那么它就会失败,并且会对MySQL约束违规异常进行呻吟。
有什么建议吗?如果将@Rollback设置为true然后设置为false,为什么测试用例会有不同的响应?
答案 0 :(得分:0)
我认为这是冲洗或不冲洗的问题。我认为您在回滚模式下隐藏了一些问题,因为更改不会发送到数据库。
要在回滚模式下测试结束时添加em.flush()
。如果出现问题,你可以解决它。