省流:

默认回滚。想要插入数据,使用@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时单元测试都会被执行。如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。

单元测试 AIR 原则

 

=====================分割线======================= 

文章到此已经结束,以下是紫薯补丁

@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);        
    }
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐