SpringBootでテスト時にRedisを動作させない


  • Spring Boot 2.1.8.RELEASE
  • JUnit 5.5.2

SpringBootでRedisを使用しているがTestでRedisを動作させたくない。

RedisAutoConfigurationRedisRepositoriesAutoConfigurationを除外する。
Spring Data's reactive Redisを使用しているならRedisReactiveAutoConfigurationも対象。

当然RedisTemplateStringRedisTemplateは登録されなくなるので、テスト時は別途用意する。

除外方法

@EnableAutoConfigurationexcludeする。

@SpringBootTest
@EnableAutoConfiguration(exclude = {
        RedisAutoConfiguration.class,
        RedisRepositoriesAutoConfiguration.class
})
class MyTest {

@SpringBootTestは既にAutoConfigurationは有効だが、@EnableAutoConfigurationを明示するとその設定が優先される。

アノテーションを作る

全てのテストで個別に指定するとクラスのアノテーションがうるさくなる。メタアノテーションの機能を使用し、アノテーションを作っておく。

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@SpringBootTest
@EnableAutoConfiguration(exclude = {
        RedisAutoConfiguration.class,
        RedisRepositoriesAutoConfiguration.class
})
public @interface MySpringBootTest {
}

テストクラスはこうなる。

@MySpringBootTest
class MyTest {