用丝带假装:重置

时间:2017-07-31 18:35:22

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

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

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

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

提前致谢!

我们尝试在每个套件之后重置JVM - 它工作得很好,但它不太实用(我们必须在Gradle和Idea中设置它(因为Idea测试中心并不支持开箱即用))。我们还尝试在测试之间重命名服务 - 这可以说99%(有时因某种原因而失败)。

1 个答案:

答案 0 :(得分:0)

如果某个地方存在静态,则应向Ribbon提交错误。找出导致问题的最小代码,如果你不能这样做,虽然他们不会做任何事情。在你的代码库中,你应该搜索静态的任何使用,这也不是最终的,如果存在则重构它们。

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

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