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

标签 spring-boot redis continuous-integration spring-boot-test rate-limiting

由于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/

相关文章:

java - 当查询方法的同一字段名中有两个连续大写字母时,spring jpa无法定位该字段

php - Laravel 明显没有做好它的工作

排除路径的 Github 工作流不起作用

git - 如何自动将源代码和编译代码(不包括 git 历史记录)部署给第三方开发人员?

java - spring-rabbitmq 自动重试连接到代理

java - Spring Boot 无法处理自定义 JPA 请求

redis - Airflow 是否支持通过 TLS 连接代理 url?

azure - 高性能读取模型(数据库)之上的缓存层的优势

Jenkins 管道模板 - 方法

java - 如何在Java中使用ElasticSearch JSON DSL?