admin管理员组文章数量:1516870
数据隔离
数据隔离
数据隔离一直是一个测试的痛点,测试数据可能是 mock 的数据,所以单测过程中,难免会造成脏数据 这种场景,有通用的解决方案。JUnit 已经帮我们做好了。这里我们只讲实操和用法。 如果有兴趣的话可以研究下 TransactionalTestExecutionListener
# 解决方案
单测引导类配置说明
- @Transactional 如果加上这个注解,就代表全局的单测,事务执行完都会自动回滚
- @Rollback(false) 如果想某个方法事务不回滚,可以单独在方法上设置。 【方法级别>全局】
下面这两个方法
- 第一个方法因为是使用测试全局事务配置,所以默认是回滚。
- 第二个方法因为使用了方法事务配置,所以会忽略全局配置,然后提交事务。
单测引导类配置
@Slf4j
@ActiveProfiles({"local"})
// 使用Spring容器引导
@RunWith(SpringRunner.class)
// 默认就是回滚,不用加@Rollback,如果全局不想回滚就在这个吧@Rollback(false),如果某个单测不想回滚,就放到单侧类上
@Transactional
@SpringBootTest(classes = {CenterProviderApplication.class}) // 指定启动类
public class BaseApplicationTest {// 全局事务,默认自动回滚@Testpublic void testInsert() {String json = "{\n" +" \"id\": 1344215264312557570,\n" +" \"arrivalOrderId\": 1344215264287391745,\n" +" \"goodsDeployId\": 1344170561282879489,\n" +" \"expectedReceiveNum\": 150,\n" +"}";OrderDetailDO orderDetail = TestConsole.toObject(json, ArrivalNoticeOrderDetailDO.class);orderDetail.setId(null);orderDetail.setCreaterId(888888L);// trueAssert.assertTrue(DB.insert(orderDetail) > 0);// notNullAssert.assertNotNull(DB.selectById(orderDetail.getId()));}// 方法事务>全局事务, 这里声明了不自动回滚@Test@Rollback(value = false)public void testInsert() {String json = "{\n" +" \"id\": 1344215264312557570,\n" +" \"arrivalOrderId\": 1344215264287391745,\n" +" \"goodsDeployId\": 1344170561282879489,\n" +" \"expectedReceiveNum\": 150,\n" +"}";OrderDetailDO orderDetail = TestConsole.toObject(json, ArrivalNoticeOrderDetailDO.class);orderDetail.setId(null);orderDetail.setCreaterId(888888L);// trueAssert.assertTrue(DB.insert(orderDetail) > 0);// notNullAssert.assertNotNull(DB.selectById(orderDetail.getId()));}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46本文标签: 数据隔离
版权声明:本文标题:数据隔离 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1688080294a176854.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论