gpt4 book ai didi

spring - Resteasy-Spring : incorrect app instance loaded during tests with multiple running instances

转载 作者:行者123 更新时间:2023-12-04 21:07:33 25 4
gpt4 key购买 nike

问题摘要 :

我写了一个简单的 REST HTTP 接口(interface),用 Spring Boot 构建,调用 GET /app 时返回一个简单的文本响应,基于 ClientInterface 的实现,其中有 2 个。REST 功能是使用 JAX-RS 实现的,由 resteasy 通过 RestEasy-SpringBoot library 提供.

我还编写了 3 个测试,其中第 3 个测试失败,因为 响应来自 ClientInterface 的第二个实现而不是第一个实现,因为(我假设)Resteasy 混合了应用程序实例,因此加载了不正确的 Spring Application 上下文,带有不正确的 bean .

注意 :您可以找到示例应用程序 here ,其中还包括文档

请查看源代码以获得清晰的图片。粘贴代码也会占用太多空间。

更多详情 :
ClientInterface 有 2 个实现它提供 REST 资源给出的响应。它们使用 client-impl-two 切换。轮廓。如果配置文件不存在,则使用第一个实现,如果存在,则使用第二个实现。

第一个和第三个测试期望来自第一个实现的响应,第二个测试期望来自秒实现的响应,因为它使用 client-two-impl轮廓。

当我使用 IntelliJ 的 JUnit 集成运行测试时,第三个失败:
enter image description here
enter image description here

您会注意到测试的命名使其强制执行特定的执行顺序,这是相关的,因为第三个测试仅在第二个测试之后执行时才会失败。它失败了,因为它得到了第二个 ClientInterface 的响应实现,即使第三个测试没有使用 client-impl-two简介 .

到目前为止我所做/发现的 :

  • 有时,运行 ./mvnw clean test也有相同的错误结果,但我无法提供可重现的示例
  • Spring/Spring Boot
  • 正确加载了 Spring 应用程序上下文
  • Spring Boot 正确注入(inject)端口号,测试中的其余客户端始终调用它们应该调用的 REST 实例
  • 只有当 Resteasy 接管请求时,它才会以某种方式加载不正确的应用程序实例,因此使用了不正确的 Spring Application 上下文,这就是它给出不正确响应的原因
  • 我通过在 SpringResourceFactory.createResource() 中保留一个断点来解决这个问题,它只是查询 beanFactory对于资源 bean,并调用 beanFactory.getBean(ClientInterface.class)看看哪个实现出现了,第三次测试不正确
  • 在测试期间,有多个应用程序实例在运行,每个实例都在其自己的端口上,我认为这与问题
  • 有关
  • 还有一个分支,jersey-instead-of-resteasy其中 Jersey 被用作 JAX-RS 实现,以及无论是使用 IntelliJ 还是使用 Maven 运行的测试都是成功的
  • 有一个DebugFilter在请求被 Resteasy servlet 接管之前,我使用它检查 Spring 应用程序上下文的外观,并且它始终是正确的(加载 ClientInterface 的正确实现),无论测试如何执行
  • 只有在运行第三个测试并且请求到达 Resteasy 时,才会加载不正确的应用程序实例,如上述几点
  • 中所述。

    基于以上几点,我强烈怀疑 Resteasy 可能是问题所在。

    任何帮助是极大的赞赏。

    最佳答案

    我对此进行了一些调试,我相信失败是由 resteasy-spring-boot-starter 中的错误引起的。我刚刚在 github 上创建了一个问题,并提供了一个 PR [2] 来修复它并使您的测试通过。
    我也在评论[3]。感谢伟大的描述和复制者。

  • https://github.com/paypal/resteasy-spring-boot/issues/51
  • https://github.com/paypal/resteasy-spring-boot/pull/52
  • https://issues.jboss.org/browse/RESTEASY-1595
  • 关于spring - Resteasy-Spring : incorrect app instance loaded during tests with multiple running instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909564/

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