gpt4 book ai didi

spring-boot - 基于系统变量的 SpringBootTest 中的事件配置文件

转载 作者:可可西里 更新时间:2023-11-01 11:24:00 25 4
gpt4 key购买 nike

由于Redis的host在本地和CI是不一样的,所以我的@Test在本地可以通过,在CI是不能通过的。

首先,我尝试像这样模拟 RedisTemplate:

RedisTemplate redisTemplate = mock(RedisTemplate.class);
ValueOperations valueOperations = mock(ValueOperations.class);
when(redisTemplate.opsForValue()).thenReturn(valueOperations);
when(valueOperations.increment(anyString(), anyLong())).thenReturn(1L);
when(valueOperations.get("a@a.com")).thenReturn("1");

它确实模拟了 RedisTemplate,但不能模拟 redisTemplate.opsForValue()valueOperations.increment(...)(我找不到原因)

然后,我写了两个名为application-ci-test.ymlapplicaiton-test.yml的配置文件,试图根据系统环境变量激活其中之一

我从here中学到了我可以通过这种方式设置事件配置文件:

@Configuration
public class MyWebApplicationInitializer
implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext) throws ServletException {

servletContext.setInitParameter(
"spring.profiles.active", "dev");
}
}

这样:

@Autowired
private ConfigurableEnvironment env;
...
env.setActiveProfiles("someProfile");

但我不知道如何使用它们。系统变量可以通过System.getenv(..)获取。所以现在我想知道如何根据我得到的变量激活配置文件。

最佳答案

我找到了一种根据系统变量或属性激活相应配置文件的方法:

import org.springframework.test.context.ActiveProfilesResolver;

public class SpringActiveProfileResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> testClass) {
final String isCITest = System.getEnv("isCITest");
return new String[] { isCITest == null ? "test" : "ci-test" };
}
}

然后在@Act​​iveProiles中使用参数resolver:

@ActiveProfiles(resolver = SpringActiveProfileResolver.class)

如何设置环境变量是另一个问题,上面的答案已经回答了

关于spring-boot - 基于系统变量的 SpringBootTest 中的事件配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53884190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com