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

如果您有任何意见、批评或建议,请留下您的评论,我将不胜感激。

广告
将在 10 秒后关闭
bannerAds