用于Spring Boot的java嵌入式Redis
我在机器上的本地Redis服务器的帮助下用Spring Boot运行集成测试用例
但我想要一个嵌入式Redis服务器,它不依赖于任何服务器,可以在任何环境下运行,比如H2内存数据库。我该怎么做
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
@SpringApplicationConfiguration(classes = Application.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class MasterIntegrationTest {
}
# 1 楼答案
你可以使用像https://github.com/kstyrc/embedded-redis这样的嵌入式Redis
调整集成测试的属性以指向嵌入式redis,例如:
在仅在测试中定义的组件中实例化嵌入式redis服务器:
# 2 楼答案
另一个好方法是使用testcontainers库,它可以运行任何类型的应用程序,这些应用程序可以在Docker容器中运行,Redis也不例外。我最喜欢的是它与Spring Test生态系统的结合
maven的依赖性:
简单集成测试:
由于Spring Framework 5.2.5(Spring Boot 2.3.x),您可以使用强大的
DynamicPropertySource
注释。 下面是一个例子:# 3 楼答案
如果您正在使用spring并对access data with redis reactively进行反应。 这意味着你有一个
ReactiveRedisConnectionFactory
(带有一个RedisConnectionFactory
bean)和一个LettuceConnectionFactory
,那么你可能想要按照这种方法为多个测试类设置一个嵌入式redis首先将playtika embedded redis添加到依赖项中:
然后在应用程序中将redis主机和端口设置为
embedded.redis
。yml(由嵌入式redis在创建时作为env变量生成)在
bootstrap-redisnoauth.properties
文件中,设置env变量embedded.redis.requirepass=false
,使其不需要密码然后在测试中使用活动配置文件:
并确保在测试类中也有这个
@TestConfiguration
,以便将您连接到随机生成的端口上生成的redis而且它应该工作顺利