在 Spring Boot 测试期间替换 @Configuration 中的 @Value 属性

2024-05-18

Scenario

我有一个 Spring Boot 应用程序@Configuration带注释的 Spring 配置类,其中包含一些@Value带注释的字段。为了进行测试,我想用自定义测试值替换这些字段值。

不幸的是,这些测试值不能使用简单的属性文件、(字符串)常量或类似文件来覆盖,而是我must使用一些自定义编写的属性来解析 Java 类(例如TargetProperties.getProperty("some.username")).

我遇到的问题是当我添加自定义PropertySource to the ConfigurableEnvironment在我的测试配置中,已经太晚了,因为这PropertySource将被添加after例如RestTemplate已经被创造了。

Question

我怎样才能覆盖@Value带注释的字段within a @Configuration获得属性的类以编程方式通过自定义 Java 代码before还有其他东西被初始化吗?

Code

生产配置类

@Configuration
public class SomeConfiguration {

    @Value("${some.username}")
    private String someUsername;

    @Value("${some.password}")
    private String somePassword;

    @Bean
    public RestTemplate someRestTemplate() {
        RestTemplate restTemplate = new RestTemplate();

        restTemplate.getInterceptors().add(
            new BasicAuthorizationInterceptor(someUsername, somePassword));

        return restTemplate;
    }

}

测试配置类

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class SomeTest {

    @SpringBootConfiguration
    @Import({MySpringBootApp.class, SomeConfiguration.class})
    static class TestConfiguration {

        @Autowired
        private ConfigurableEnvironment configurableEnvironment;

        // This doesn't work:

        @Bean
        @Lazy(false)
        // I also tried a @PostConstruct method
        public TargetPropertiesPropertySource targetPropertiesPropertySource() {
            TargetPropertiesPropertySource customPropertySource =
                new TargetPropertiesPropertySource();
            configurableEnvironment.getPropertySources().addFirst(customPropertySource);
            return customPropertySource;
        }
    }
}

您可以直接在@SpringBootTest注释使用properties范围:

@SpringBootTest(properties = {"some.username=user", "some.password=pwd"},
                webEnvironment = SpringBootTest.WebEnvironment.NONE)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring Boot 测试期间替换 @Configuration 中的 @Value 属性 的相关文章

  • 如何禁用Spring Boot参数分割

    我们有许多 RestController 接收用户编写的通用语言短语 短语可以很长并且包含标点符号 例如句号 当然还有逗号 简化控制器示例 RequestMapping value countphrases method RequestMe
  • 使用 API 密钥和机密保护 Spring Boot API

    我想保护 Spring Boot API 的安全 以便只有拥有有效 API 密钥和秘密的客户端才能访问它 但是 程序内部没有身份验证 使用用户名和密码的标准登录 因为所有数据都是匿名的 我想要实现的目标是所有 API 请求只能用于特定的第三
  • Zuul不转发请求到其他微服务

    我正在使用 Spring Boot 微服务 我已经配置了 eureka zuul 代理和另一个微服务 帐户 如果我直接从帐户拨打电话 则工作正常 帐户和 zuul 服务器都显示在 eureka 上 当我尝试使用 zuul 代理进行访问时 它
  • scala 中的模拟案例类:Mockito

    在我的游戏应用程序中 我打算模拟一个案例类 我可以这样做 但它创建了一个所有成员变量都为空的对象 有没有办法创建案例类的模拟对象 以便该对象可以初始化一些成员 case class User name String address Stri
  • 在不同的 python 补丁版本上运行 tox

    简而言之 有没有办法tox循环使用Python的补丁版本 Long 我希望测试在 2 7 7 2 7 8 等上运行 基本上我是在 2 7 6 上运行 想看看是否可以摆脱这个警告 https urllib3 readthedocs org e
  • 如何在 Spring Integration 流程中访问 Flux?

    我尝试访问 Spring Integration 中的 Flux 对象 而不将流声明拆分为两个函数 我想知道如何执行以下操作 Bean public IntegrationFlow mainFlow return IntegrationFl
  • Spring boot 2.x with Camel 2.25:Spring 特定端点不起作用

    我有一个带有 spring boot 2 x 和 Camel 2 25 的项目 它有不同的骆驼路线以及很少的 REST 消费者路线 到目前为止一切都很好 现在我添加了一些带有一些端点的普通 spring boot RestControlle
  • 从 SCDF 执行任务时,数据库凭证作为部分作业参数公开

    我有自定义构建的 SCDF 它在 Openshift 中构建为 docker 映像 并在 server deployment yaml 中称为 docker 映像 我使用 Oracle 数据库来存储任务元数据 并且是此处的外部源 我传递了
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • 未注入带有 JPA2 的 Apache Ignite 2.7 IgniteRepository

    使用在 Web 上建立的 guildes 我使用 Spring Data JPA 2 应用程序制作了简单的 Spring Boot 2 仅在 2 7 版本中才向 Apache Ignite 添加了 Spring Boot JPA 2 支持
  • 如何对参数列表中的每个项目运行 pytest 测试

    假设我有一个 HTTP URL 列表 例如 endpoints e 1 e 2 e n 我想跑n测试 每个端点一个 我怎样才能做到这一点 一次测试所有端点的简单方法是 def test urls for e in endpoints r g
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • 将 RequestBody json 转换为对象 - Spring Boot

    我是 java 开发的初学者 但之前有 PHP 和 Python 等编程语言的经验 对于如何进行 Spring Boot 的开发几乎没有什么困惑 我正在开发一个rest API 它有以下请求 key value key1 value1 pl
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • 为什么 @Bean 返回模拟工作但 @MockBean 在 Spring Boot 测试中跨线程保留 Mockito 状态时不起作用?

    我有一个 JMS Spring Boot 项目 我正在尝试与我的 JMS Listener 进行集成测试 并且我使用 mockito 模拟来模拟具有外部服务调用的 bean 在测试过程中 我遇到了一个问题Mockito when thenR
  • 在测试中替换 OAuth2 WebClient

    我有一个小型 Spring Boot 2 2 批次 用于写入 OAuth2 REST API 我已经能够配置WebClient下列的https medium com asce4s oauth2 with spring webclient 7
  • 如何指定运行哪个生菜场景

    如何指定运行哪个生菜场景 在使用 python lettuce 测试框架时 我经常遇到这种情况 一个场景失败 然后我想放大这个场景来修复这个场景 我们可以在功能文件中指定要运行的生菜场景吗 您可以使用标签进行所需的测试 例如 Scenari
  • Spring Boot 和 Kafka,Producer 抛出 key='null' 异常

    我正在尝试使用Spring Boot with Kafka and ZooKeeper with Docker docker compose yml version 2 services zookeeper image wurstmeist
  • Espresso - 检查使用按钮按下意图打开哪个活动?

    是否可以跟踪按下某个按钮后打开了哪个 Activity 我有一个测试 其中当单击 按下按钮时 it 向服务器发送请求 直到发送请求时 它打开一个活动 验证是否执行成功在测试中 我需要检查打开的 Activity 是什么 我的测试示例 检查
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦

随机推荐