使用中间Ruby版本进行测试有意义吗?

使用中间Ruby版本进行测试有意义吗?,ruby,travis-ci,ruby-2.0,ruby-2.3.1,Ruby,Travis Ci,Ruby 2.0,Ruby 2.3.1,如果一个项目通过了Ruby 2.0.0-p648和Ruby 2.3.1中的测试,那么使用诸如2.1.8和2.2.3这样的版本进行测试有意义吗 是否有任何语言功能在Ruby 2.0和Ruby 2.3中工作,但在Ruby 2.2中暂时不起作用或工作方式不同?您应该针对您希望在其中使用的环境测试代码。Ruby语言版本可能会有所不同。如果您的代码应该支持它,也可以考虑对JRuBuy和RubimIUS进行测试,例如,它作为公共GEM提供。 从逻辑上讲,对最早和最新版本的测试应该涵盖与语言特性有关的大多数故

如果一个项目通过了Ruby 2.0.0-p648和Ruby 2.3.1中的测试,那么使用诸如2.1.8和2.2.3这样的版本进行测试有意义吗


是否有任何语言功能在Ruby 2.0和Ruby 2.3中工作,但在Ruby 2.2中暂时不起作用或工作方式不同?

您应该针对您希望在其中使用的环境测试代码。Ruby语言版本可能会有所不同。如果您的代码应该支持它,也可以考虑对JRuBuy和RubimIUS进行测试,例如,它作为公共GEM提供。 从逻辑上讲,对最早和最新版本的测试应该涵盖与语言特性有关的大多数故障场景(尽管不一定包括所有语言错误,因为可能会引入新的错误)。据我所知,还没有一个Ruby特性在一个版本中被故意添加或删除,然后在以后的版本中被推翻。除非:也许在您的生产代码中,您检测到一个特性的存在,然后完全使用该特性——在这种情况下,具有该特性但未处于最新状态的中间Ruby版本可能会失败

可能还有其他的警告,从哲学上讲,当您开始测试时,您希望避免太多的逻辑思考“这应该是可行的,因为……”。测试的目的是证明您的代码不会以您已经介绍过的方式失败(好吧,它有更多的深度,但是如果深入到测试哲学中,答案会太长)。如果您想声明“适用于所有版本的Ruby MRI,从2.0.0到2.3.1”,那么如果您已经实际测试过它,那么您会感到更安全。事实上,当在公共场所发表这样的声明时,我通常只会说一些更接近原始事实的话——“在版本2.0.0、2.1.4和2.3.1中测试”

显然,回报是递减的。如果您在2.1.9中没有问题,那么您在2.1.10中就不太可能有问题-在某些情况下,检查每一个微小的变化(即使只是查看测试结果)的成本将高于额外覆盖的好处

对于这个问题,通常的答案是测试尽可能多的变化,因为您的自动化测试环境可以处理,您可能会费心设置和维护。如果您的测试服务提供商为您并行地使用多个版本的Ruby,例如您使用的是Travis,那么测试多个版本的成本相对较低。因此,你可能会得到尽可能多的关于环境变化的报道,你希望在“野外”看到这些变化,因为你可能会不厌其烦地去看