2
0

More than 1 year has passed since last update.

mybaits-spring-boot-starter-testの使い方

Posted at

はじめに

MyBatis-Spring-Boot-Starter-Testを使ってMapperクラスのテストコードを書いてみたので備忘録を残します。

概要

Spring BootでMyBatisを使用しており、MyBatisにより自動生成されたMapperクラスのテストを行う場合は、SpringのDIコンテナを使ってテストを行う必要があります。しかし、単に@SpringBootTestアノテーション等でSpring Bootの機能を有効にするだけでは、Mapperクラスのテストに不要なAutoConfigureクラスが有効になったり、不要なBeanが生成されたりしてしまいます。
MyBatis-Spring-Boot-Starter-Testを使用することで、このような問題を回避できます。

環境

  • Java
  • Junit5
  • SpringBoot
  • MyBatis
  • Testcontainers
  • Maven
  • Windows10

依存関係

MyBatis-Spring-Boot-Starter-Testを使用するためには、以下の依存関係を<dependencies>に追加してください。

<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を利用するための依存関係も適宜追加してください。

テストコードの記述方法

MyBatis-Spring-Boot-Starter-Testを有効にするための@MybatisTestアノテーションをテストクラスに付与することで、MyBatis関連のAutoConfigureクラスのみが有効になり、MapperクラスのみがDIコンテナにBean登録されるようになります。

@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のフィルタリングについては、このページ等を参照してください。
クラスによるフィルタリング以外に、アノテーションの有無によるフィルタリングや正規表現によるフィルタリングも存在します。

参考

ご意見・ご指摘等あればコメントいただけると幸いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0