我在本地Redis服务器的帮助下,使用Sping Boot 运行了我的集成测试用例。
但是我想要一个嵌入式的Redis服务器,它不依赖于任何服务器,可以在任何环境下运行,就像H2内存数据库一样。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
@SpringApplicationConfiguration(classes = Application.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class MasterIntegrationTest {
}
字符串
5条答案
按热度按时间sf6xfgos1#
你可以使用像https://github.com/kstyrc/embedded-redis这样的嵌入式Redis
1.将依赖项添加到pom.xml
1.调整集成测试的属性,使其指向嵌入的redis,例如:
字符串
1.将嵌入式redis服务器示例化到仅在测试中定义的组件中:
型
ig9co6j12#
edit:我现在强烈建议使用testcontainers,如@ magiconter answer中所解释的,我现在也在使用它进行测试。
您可以将ozimov/embedded-redis用作Maven(-test)-dependency(这是kstyrc/embedded-redis的继承者)。
1.将依赖项添加到pom.xml
字符串
1.为集成测试调整应用程序属性
型
1.在测试配置中使用嵌入式redis服务器
型
vawmfj5a3#
另一种简洁的方法是使用testcontainers库,它可以运行任何类型的应用程序,可以在Docker容器中运行,Redis也不例外。我最喜欢的是它与Spring Test生态系统轻度耦合。
maven的依赖:
字符串
简单集成测试:
型
自Spring Framework 5.2.5(Sping Boot 2.3.x)起,您可以使用强大的
DynamicPropertySource
annotation。下面是一个示例:型
pw9qyyiw4#
你可以看到这个存储库:https://github.com/caryyu/spring-embedded-redis-server,与Spring和Sping Boot 完全集成
maven依赖
字符串
spring Boot 注解
型
application.yml的用法
型
eyh26e7m5#
如果你正在使用spring和reactive to access data with redis reactively。这意味着你有一个
ReactiveRedisConnectionFactory
(带有一个RedisConnectionFactory
bean)和一个LettuceConnectionFactory
,那么你可能想按照这种方法为多个测试类设置一个嵌入式redis。首先将playtika embedded redis添加到依赖项中:
字符串
然后在application.yml中将redis主机和端口设置为
embedded.redis
(在创建时由嵌入的redis作为env变量生成)。型
在
bootstrap-redisnoauth.properties
文件中,设置env变量embedded.redis.requirepass=false
,使其不需要密码。然后在您的测试中使用活动配置文件:
型
确保在你的测试类中也有这个
@TestConfiguration
,这样你就可以连接到一个随机生成的端口上的redis。型
它应该工作顺利。