OAuth/Config 客户端 Spring 应用程序的单元测试

Posted

技术标签:

【中文标题】OAuth/Config 客户端 Spring 应用程序的单元测试【英文标题】:Unit tests for a OAuth/Config client Spring application 【发布时间】:2021-08-10 23:24:44 【问题描述】:

我有一个非常简单的带有云配置客户端和 oauth 资源的 Spring 应用程序。事实证明,在不启动配置服务器的情况下运行单元测试是一个相当大的挑战。

目前没有任何用于禁用云配置客户端的解决方案适用于最新版本的 spring。我什至尝试使用空的或伪造的 config.import url,但都没有禁用它。我真的不想为了运行单元测试而启动配置服务器,而且感觉也不正确。

为配置客户端应用程序设置测试的推荐方法是什么?

寻找指针、想法。

谢谢!

【问题讨论】:

【参考方案1】:

在测试中将配置设为可选似乎可以完成这项工作,尽管您仍然看到有人尝试下载配置。

spring.config.import: "optional:configserver:http://localhost:8888"

或者你可以使用

spring.cloud.config.enabled: false

但是,客户端将始终尝试下载配置,即使它似乎将其视为可选并继续前进。我认为这对新用户来说真的很令人困惑——有人认为客户端仍然处于启用状态。当配置服务器启动并且您希望客户端不下载配置时会发生什么,但它仍然会下载。我想找出答案的唯一方法就是测试。

奇怪的是下面的组合无法加载上下文。

spring.config.import: "optional:configserver:http://localhost:8888"
spring.cloud.config.enabled: false

导入设置为可选或配置被禁用,但不能同时设置。

而且,这仅用于测试。使用与 test 相同的设置创建另一个配置文件 application-standalone.yml 失败。

【讨论】:

您是否尝试过此线程中描述的解决方案?道格的答案看起来很有希望;):***.com/questions/41985262/… @MarkBramnik 最新版本的 cloud-config-client 不使用 bootstap.properties (***.com/a/65009480/1257434),并且我已经为测试提供了不同的属性文件。我真的很想从属性文件外部提供配置。 也许是个愚蠢的问题,但你是把spring.cloud.config.enabled: false 放在application.yaml 还是bootstrap.yaml 中? application.yaml。从这里 (***.com/questions/64994034/…) 可以看出,bootstrap.yml 已被弃用,默认情况下不使用。必须设置一个设置以启用旧模式。

以上是关于OAuth/Config 客户端 Spring 应用程序的单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Spring中至少需要一个映射错误

Spring Cloud - Ribbon客户端的使用

Error creating bean with name ‘org.springframework.security.oauth2.config.annotation.web.configurati

Spring Cloud - Ribbon客户端的使用性

Spring Cloud学习笔记-010

如何覆盖 Spring Cloud OAuth2 客户端自动配置?