如果使用了Spring的声明式事务管理,那么Junit测试用例中,要做如下配置。
类前面要加上这些注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/applicationContext.xml"})
@Transactional
@TransactionConfiguration(defaultRollback = false)
重点看后2个。
1)如果开启了Spring的事务,但是没有在增删改等方法调用时提前声明@Transactional的话,会提示错误:
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove ‘readOnly’ marker from transaction definition.
Spring和Hibernate整合之后,事务的配置是个比较麻烦的东西。我暂时还是用之前学习SSM框架时初步学会的声明式事务+注解来解决问题。后续再详细进行学习。
2)如果在测试环境中,不添加第四句设置默认回滚的话,测试完成后会将记录自动删除,不利于观察测试结果。克隆一份生产环境当作测试环境下,先将其设置成false来测试(生产环境就算了)。
3)说个题外话。逼死强迫症的MySQL主键自增。如果删除了原来id是8的记录,然后又新插入一条记录,那么新的记录id是9,而不是8。因为MySQL主键自增那个地方并没有随着你的删除而进行更改。其实这个无伤大雅,一般也不会用id这个字段去干什么。比如在员工管理系统中,员工工号都会另外做一个列(也方便用工号来区分部门之类的),而不会直接用id来做标识(练手项目除外,简单就行)。