Mybatis-spring-boot-starter-test的使用方法
首先
我使用MyBatis-Spring-Boot-Starter-Test编写了一些Mapper类的测试代码,这里只是留下一篇备忘录。
简要
如果使用Spring Boot和MyBatis,我们需要使用MyBatis自动生成的Mapper类进行测试,需要利用Spring的DI容器来执行测试。然而,仅仅使用@SpringBootTest注解等激活Spring Boot的功能,会导致不必要的AutoConfigure类被激活,或者生成不必要的Bean。
通过使用MyBatis-Spring-Boot-Starter-Test,可以避免这些问题。
环境
-
- Java
-
- Junit5
-
- SpringBoot
-
- MyBatis
-
- Testcontainers
-
- Maven
- Windows10
互相依赖关系
请在中添加以下依赖关系,以使用MyBatis-Spring-Boot-Starter-Test。
<dependencies>
...
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>2.2.0</version>
<scope>test</scope>
</dependency>
...
</dependencies>
请根据需要适时添加其他依赖关系,例如Spring Boot和MyBatis。
编写测试代码的方法
通过在测试类中添加@MybatisTest注解来启用MyBatis-Spring-Boot-Starter-Test,只有与MyBatis相关的AutoConfigure类才会被激活,并且只有Mapper类会被注册为Bean到DI容器中。
@MybatisTest // MyBatis-Spring-Boot-Starter-Testの有効化
class UserMapperTest {
@Autowired
private UserMapper mapper; // Mapper実装クラスがインジェクション可能になる
@Test
void testUserMapper () {
/* ... */
}
}
此外,您还可以通过指定@MybatisTest注释的includeFilters参数和excludeFilters参数来增加或减少DI容器中注册的Bean。
@MybatisTest(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
classes = { UserService.class, AppConfig.class }))
// Mapperクラス以外にも、指定したBeanやJavaConfigもDIコンテナに登録されるよう指定
class UserDaoTest {
@Autowired
private UserDao dao;
@Autowired
private UserService dao; // 指定したBeanもインジェクション可能になる
@Autowired
private PasswordEncoder encoder; // 指定したJavaConfigで定義されているBeanもインジェクション可能になる
/* ... */
}
}
有关Bean的过滤,请参考此页面等。除了通过类进行过滤外,还存在通过注释的有无和正则表达式进行过滤的方式。
请参考
-
- http://mybatis.org/spring-boot-starter/mybatis-spring-boot-test-autoconfigure/index.html
- https://qiita.com/kazuki43zoo/items/ea79e206d7c2e990e478#mybatistestmybatis-spring-boot-starter-test%E3%81%AE%E5%88%A9%E7%94%A8
如果您有任何意见、批评或建议,请留下您的评论,我将不胜感激。