Spring Data RedisのテストにTestcontainersを使う
Spring Data RedisのRedisTemplateのテストにTestcontainersを使いたいときのメモ。
ソースコード
build.gradle
plugins { id 'org.springframework.boot' version '2.4.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = JavaVersion.VERSION_11 repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-redis' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation platform('org.testcontainers:testcontainers-bom:1.15.3') testImplementation 'org.testcontainers:testcontainers' testImplementation 'org.testcontainers:junit-jupiter' } test { useJUnitPlatform() }
RedisClient.java
@Component public class RedisClient { private final StringRedisTemplate redisTemplate; public RedisClient(StringRedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } public String get(String key) { return redisTemplate.opsForValue().get(key); } public void set(String key, String value) { redisTemplate.opsForValue().set(key, value); } }
RedisClientTest.java
@SpringBootTest(webEnvironment = WebEnvironment.NONE) @Testcontainers class RedisClientTest { @Container private static final GenericContainer<?> CONTAINER = new GenericContainer<>("redis:6.2").withExposedPorts(6379); @Autowired private RedisClient client; @DynamicPropertySource static void redisProperties(DynamicPropertyRegistry registry) { registry.add("spring.redis.port", () -> CONTAINER.getMappedPort(6379)); } @BeforeEach void setUp() { client.set("key1", "value1"); } @Test void get() { String result = client.get("key1"); assertNotNull(result); assertEquals("value1", result); } }