【问题标题】:Feign with Ribbon: resetFeign with Ribbon: 重置
【发布时间】:2017-07-31 18:35:22
【问题描述】:

我们正在尝试在我们的一个项目中使用 Feign + Ribbon。在生产代码中,我们没有问题,但在 JUnit 测试中有一些问题。

我们正在尝试模拟多种情况(服务失败、正常运行、异常等),因此我们需要在集成测试中多次配置 Ribbon。不幸的是,我们注意到即使我们销毁 Spring 上下文,部分状态可能仍然存在于静态变量中的某个地方(例如:新测试仍然连接到以前套件中的平衡器)。

有什么推荐的方法,如何清除这两个工具的静态状态? (类似于Hystrix.reset()

提前致谢!


我们尝试在每个套件之后重置 JVM - 它运行良好,但不是很实用(我们必须在 Gradle 和 Idea 中都设置它(因为 Idea 测试调谐器不支持开箱即用))。我们还尝试在测试之间重命名服务 - 这可以说是 99%(它有时会由于某种原因失败......)。

【问题讨论】:

  • 问题似乎仍未解决。我刚刚遇到了功能区 2.3.0、hystrix-core 1.5.18、open feign 10.2.3、Spring Boot 2.1.9 或 2.1.17。使用 @SpringBootTest 的不同测试,具有不同属性的单独 Spring 应用程序上下文,会受到影响,因为 Feign 客户端在第一个此类测试的运行时使用 Ribbon/Feign (?) 以某种方式缓存的配置。一项一项运行的所有测试都是正确的。

标签: java spring netflix-feign netflix-ribbon feign


【解决方案1】:

如果某处存在某种静态状态,您应该向 Ribbon 提交错误。找出导致问题的最小代码,如果您无法做到这一点,那么他们将不会做任何事情。在您的代码库中,您应该搜索任何不是 final 的 static 的使用,如果有的话也重构它们。

此外,您可能会发现对各种不同类型的测试进行严格区分很有用。听起来您不是在对我进行单元测试。即使您只是模拟这些服务,并模拟故障,这种测试实际上是一个集成测试,因为您正在测试 Ribbon 是否使用您自己的组件正确配置,这实际上是一个集成测试。如果您只测试您的组件是否正确配置功能区,这将是一个单元测试,不确定我是否有道理哈哈,这是一个微妙的区别,但它对您的测试有很大的影响。

另一方面,不要认为你现在拥有的东西一定是个坏主意。如果这是一个关键任务功能,那么进行一些重量级的集成测试来检查 Feign 的行为可能非常有用,IMO 在这种情况下这是一个好主意。但这是一个重量级的集成测试,应该这样对待。您甚至可能想使用一些容器魔术等来实现这种测试,而服务在各种不同的故障场景中都会失败。这将存在于 CI 中,通常开发人员不会在每次提交时运行这些人,除非他们直接使用与集成有关的功能。

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2015-09-02
    • 2020-11-02
    • 2017-10-07
    • 2017-07-23
    • 2020-07-26
    • 1970-01-01
    • 2015-02-21
    • 2015-05-23
    相关资源
    最近更新 更多