Junit进行数据库操作时事务自动回滚
2017-09-03 17:58
316 查看
今天用Junit在测试service时发现,对数据进行修改时不报错,但是去数据库查询发现数据并没有更新,困惑了一段时间,代码如下
@Test public void testAddOrUpdateUserEmail() { Long result = (long) userService.addOrUpdateUserEmail("777", "127.0.0.1", "个人中心-test", "添加邮箱", "aa"); }
juni运行正常,使用debug数据填充也没问题,但是数据库里的数据并没有更新,代码修改为如下:
@Test public void testAddOrUpdateUserEmail() { Long result = (long) userService.addOrUpdateUserEmail("777", "127.0.0.1", "个人中心-test", "添加邮箱", "aa"); User user = userMapper.selectByPrimaryKey("770517"); System.out.println("------>user:" + user.getUsername() + user.getEmail()); }
这时候再debug可以查询出打印结果显示已更新,去数据库查询发现还是没有变化,此时怀疑是事务的回滚,查了资料后发现项目使用的Junit基类继承于AbstractTransactionalJUnit4SpringContextTests
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:app-initconfig-excdubbo-test.xml" }) public class BaseExcludeDubboTest extends AbstractTransactionalJUnit4SpringContextTests{ /** * @description */ @Test public void testEmpty(){ } }
AbstractTransactionalJUnit4SpringContextTests默认操作修改、新增、删除操作是事务自动回滚,避免出现脏数据,如果不需要回滚,可以添加@Rollback(false)注解即可。
相关文章推荐
- setSavepoint()进行数据库存档,mysql事务,rollback()回滚
- junit 单元测试事务自动回滚
- 进行数据库操作时出现”非法的事务状态“的错误!!!
- spring结合junit进行单元测试(二)——测试后进行事务回滚
- JDBC调用存储过程、JDBC事务处理、数据库自动生成的主键
- PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
- Android 中使用JUnit进行自动测试
- MyBatis进行insert操作时不能将数据插入到数据库
- Oracle 修改数据库提交之后进行回滚
- 如何使用ANT自动进行数据库的相关操作
- spring的事务管理的原理(如何设置在Action或者在Service层进行事务拦截及其回滚)
- Spring的事务管理对何种异常进行回滚
- mule使用jms 进行事务回滚(rollback) 和消息重发(redelivery)
- Junit加载Spring容器作单元测试_添加事务回滚
- Spring的事务管理对何种异常进行回滚
- 使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在方法调用之前决定是否开启一个事务,并在方法执行之后决定事务提交或回滚事务。
- Spring 使用注解方式进行事务管理--注解回滚机制
- PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
- Spring事务管理只对出现运行期异常进行回滚
- hibernate入门第五课 通过Hibernate API编写访问数据库代码并使用junit进行单元测试