一. 为什么要用嵌入式数据源做单测
嵌入式数据源作为应用的一部分运行,非常适合在开发和测试环境中使用,因为在使用嵌入式数据源的情况下,你可以在每次应用启动或者每次运行单元测试之前初始化测试数据。这样就可以避免开发库或者测试库因为垃圾数据等带来的问题。
二. 如何配置
这里以Spring Boot整合Mybatis为例,嵌入式数据源使用H2,配置类代码如下:
图2 图3 application.properties这里TransactionTemplate是实现编程式事务;声明式事务直接使用@Transactional注解;【如果是多数据源,使用@Transactional时需要指定对应的事务管理器】
三. 单测规范
1. 每个test之间在数据上最好不要相互依赖【即:一个test中insert数据,另一个test中不能被select出来】
2. test的执行顺序可以是任意的
3. 单测的覆盖率越高越好(企业会要求到达 70%以上)
四. 如何实现规范
要达到上述的规范,我们要做的就是在test执行之后,执行rollback即可,这样当前test产生的数据,就不会被写到H2的表里。
spring-test模块中有一个类TransactionalTestExecutionListener,其中afterTestMethod会在test执行之后执行,如果开启了事务,则会调用TransactionContext类的endTransaction方法,endTransaction里会判断是否需要rollback,默认是true。
所以我们只需要在单测类或者单测方法上使用@Transactional声明事务即可,源码如下:
TransactionalTestExecutionListener.afterTestMethod TransactionContext.endTransaction 默认的参数@Transactional("testTransactionManager")
【Spring Boot默认支持事务,所以无需显式使@EnableTransactionManagement注解】
五. 如何在Spring Boot中整合Mybatis多数据源
请参数https://blog.csdn.net/mxw2552261/article/details/78640062
网友评论