1

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

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

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

提前致谢!


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

4

1 回答 1

0

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

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

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

于 2017-08-01T01:16:25.973 回答