我们正在尝试在我们的一个项目中使用 Feign + Ribbon。在生产代码中,我们没有问题,但我们在 JUnit 测试中有一些问题。
我们正在尝试模拟多种情况(服务失败、正常运行、异常等(,因此我们需要在集成测试中多次配置功能区。不幸的是,我们注意到,即使我们销毁了 Spring 上下文,部分状态仍然可能在静态变量中的某个地方幸存下来(例如:新测试仍然从以前的套件连接到平衡器(。
有没有推荐的方法,如何清除这两个工具的静态状态?(类似Hystrix.reset()
(
提前感谢!
我们尝试在每个套件之后重置 JVM - 它运行良好,但它不是很实用(我们必须在 Gradle 和 Idea 中设置它(因为 Idea 测试调谐器不尊重开箱即用((。我们还尝试在测试之间重命名服务 - 这适用于 99%(有时由于某种原因会失败......
如果某处存在某种静态状态,则应向功能区提交错误。找出导致问题的最小代码,如果您无法做到这一点,那么它们将不会执行任何操作。在你的代码库中,你应该搜索任何不是最终的静态使用,如果存在的话,也要重构它们。
此外,您可能会发现在各种不同类型的测试之间进行严格区分很有用。听起来不像你在对我进行单元测试。即使您只是模拟这些服务并模拟故障,这种测试实际上也是集成测试,因为您正在测试功能区是否使用您自己的组件正确配置,这实际上是一个集成测试。如果您只测试您的组件是否正确配置功能区,那将是一个单元测试,不确定我是否有意义哈哈这是一个微妙的区别,但它在您的测试中有很大的影响。
另一方面,不要认为你现在拥有的东西一定是一个坏主意。如果这是一个关键任务功能,那么进行一些重量级集成测试来检查 Feign 的行为可能非常有用,在这种情况下,IMO 这是一个好主意。但这是一个重量级的集成测试,应该这样对待。您甚至可能希望使用一些容器魔术等来实现这种测试,这些服务在各种不同的故障场景中都会失败。这将存在于 CI 中,通常开发人员不会在每次提交时运行这些人,除非他们直接使用有关集成的功能。