如果您正在使用弹簧并对access data with redis reactively 做出反应。
这意味着您有一个ReactiveRedisConnectionFactory(带有一个RedisConnectionFactory bean)和一个LettuceConnectionFactory,那么您可能希望按照这种方法为多个测试类设置一个嵌入式redis。
首先将playtika embedded redis 添加到您的依赖项中:
dependencies {
testCompile("com.playtika.testcontainers:embedded-redis:2.0.9")
}
然后在 application.yml 中将 redis 主机和端口设置为 embedded.redis (由嵌入式 redis 在创建时作为 env 变量生成)。
spring:
redis:
host: \${embedded.redis.host:localhost}
port: \${embedded.redis.port:6739}
在bootstrap-redisnoauth.properties 文件中,设置环境变量embedded.redis.requirepass=false,使其不需要密码。
然后在您的测试中使用活动配置文件:
@ActiveProfiles("redisnoauth")
并确保在您的测试类中也包含此 @TestConfiguration,以便将您连接到在随机生成的端口上生成的 redis。
@Category(IntegrationTest.class)
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("redisnoauth")
public class RedisCacheTest {
@TestConfiguration
static class RedisTestConfiguration {
@Bean
public RedisConnectionFactory redisConnectionFactory(@Value("${spring.redis.host}") String host,
@Value("${spring.redis.port}") int port) {
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisOperations<String, String> stringKeyAndStringValueRedisOperations(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer(UTF_8));
redisTemplate.setValueSerializer(new StringRedisSerializer(UTF_8));
return redisTemplate;
}
}
@Test
public void myTest() {
// your test
}
}
它应该可以顺利运行。