由于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.yml
和applicaiton-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" };
}
}
然后在@ActiveProiles中使用参数resolver
:
@ActiveProfiles(resolver = SpringActiveProfileResolver.class)
如何设置环境变量是另一个问题,上面的答案已经回答了
关于spring-boot - 基于系统变量的 SpringBootTest 中的事件配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53884190/