Resteasy-Spring:在使用多个 运行 实例进行测试期间加载了不正确的应用程序实例

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

问题简短摘要

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

提供

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

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

请查看源代码以获得清晰的图片。把代码也贴进去会占用太多space

更多详情:

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

firstthird 测试期望第一个实现的响应,second 测试需要秒实现的响应,因为它使用的是 client-two-impl 配置文件。

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

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

到目前为止我有什么done/discovered:

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

非常感谢任何帮助。

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

  1. https://github.com/paypal/resteasy-spring-boot/issues/51
  2. https://github.com/paypal/resteasy-spring-boot/pull/52
  3. https://issues.jboss.org/browse/RESTEASY-1595