junit单元测试 springboot mybatis 插入成功 没有数据
junit单元测试 springboot mybatis 插入成功 没有数据
省流:
默认回滚。想要插入数据,使用@Rollback(false)
问题:
junit测试,日志显示插入成功,但数据库没有新增数据。
原因:
默认事务回滚,防止测试用的脏数据进入数据库。
解决:
@Rollback(false)关闭回滚。
代码示例
在测试类上加上注解 @Rollback(false)
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Rollback(false) //关闭回滚,希望在数据库里产生真实数据
public class ImportTest {
@Test
public void t1(){
//...
}
}
也可以加在方法上
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class ImportTest {
@Autowired
private UserMapper userMapper;
@Test
@Rollback(false)
void testMethod1() {
userMapper.inserUser(User user);
}
}
其他场景:
有时候,想测试代码整个链路是否通了,尤其是连接生产的数据库,使用生产数据测试,但不想插入数据进入生产数据库。这时候默认回滚就非常有必要。记得将@Rollback(false)删除,或者改成 @Rollback(true)
补充:
AIR原则
好的单元测试必须遵守 AIR 原则,即 Automatic (自动化)、Independent (独立性)、Repeatable (可重复)。 单元测试应该是全自动执行的,并且非交互式的。 测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。 输出结果需要人工检查的测试不是一个好的单元测试。
为了保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,也不能依赖执行的先后次序。
单元测试是可以重复执行的,不能受到外界环境的影响。因为单元测试通常会被放到持续集成中,每次有代码 check in时单元测试都会被执行。如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。
=====================分割线=======================
文章到此已经结束,以下是紫薯补丁
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Rollback(false) //关闭回滚,希望在数据库里产生真实数据
public class ImportTest {
@Test
public void t1(){
//...
}
}
@RunWith(SpringRunner.class)
@MybatisPlusTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
public class ImportTest {
@Autowired
private UserMapper userMapper;
@Test
@Rollback(false)
void testMethod1() {
userMapper.inserUser(User user);
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)