使用中间 Ruby 版本进行测试是否有意义?
Does it make sense to test with intermediate Ruby versions?
如果项目通过了 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 语言版本是可以变化的一件事。如果您的代码应该支持它,您也可以考虑针对 JRuby 和 Rubinius 进行测试 - 例如它以 public gem.
的形式提供
从逻辑上讲,对最早和最新版本的测试应该涵盖与语言功能相关的大多数失败场景(尽管不一定是所有语言错误,因为可能会引入新错误)。据我所知,没有一个 Ruby 功能是在一个版本中故意添加或删除的,然后该决定在更高版本中被撤销。除非:也许在您的生产代码中,您正在检测某个功能的存在,然后完全使用该功能 - 在这种情况下,具有该功能但不处于最新状态的中间 Ruby 版本可能会失败。
可能还有其他注意事项,从哲学上讲,当您开始测试时,您希望避免过多的逻辑 "this should work because . . ." 思考。测试的目的是 证明 你的代码不会以你所涵盖的方式失败(好吧,它比这更深入,但如果它的答案会变得太长潜入测试哲学)。如果你想声明 "works in all versions of Ruby MRI from 2.0.0 to 2.3.1" 那么如果你实际测试过它,你会觉得做那个声明更安全。事实上,当在 public 处发表这样的声明时,我通常只会说一些更接近原始事实的内容 - "tested in versions 2.0.0, 2.1.4 and 2.3.1"。
显然有递减的returns。如果您在 2.1.9 中没有问题,那么您在 2.1.10 中出现问题的可能性很小 - 在某些时候,检查每一个微小的变化,甚至只是查看测试结果,都会比收益更多额外保险。
这个问题的通常答案是测试您的自动化测试环境可以处理的尽可能多的变体,并且您可以不厌其烦地设置和维护。如果您的测试服务提供商为您同时使用 Ruby 的多个版本 - 例如您正在使用 Travis - 那么测试多个版本相对便宜。因此,您也可以尽可能多地了解您希望看到的环境变化 "in the wild" ,因为您可能不愿意看到。
如果项目通过了 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 语言版本是可以变化的一件事。如果您的代码应该支持它,您也可以考虑针对 JRuby 和 Rubinius 进行测试 - 例如它以 public gem.
的形式提供从逻辑上讲,对最早和最新版本的测试应该涵盖与语言功能相关的大多数失败场景(尽管不一定是所有语言错误,因为可能会引入新错误)。据我所知,没有一个 Ruby 功能是在一个版本中故意添加或删除的,然后该决定在更高版本中被撤销。除非:也许在您的生产代码中,您正在检测某个功能的存在,然后完全使用该功能 - 在这种情况下,具有该功能但不处于最新状态的中间 Ruby 版本可能会失败。
可能还有其他注意事项,从哲学上讲,当您开始测试时,您希望避免过多的逻辑 "this should work because . . ." 思考。测试的目的是 证明 你的代码不会以你所涵盖的方式失败(好吧,它比这更深入,但如果它的答案会变得太长潜入测试哲学)。如果你想声明 "works in all versions of Ruby MRI from 2.0.0 to 2.3.1" 那么如果你实际测试过它,你会觉得做那个声明更安全。事实上,当在 public 处发表这样的声明时,我通常只会说一些更接近原始事实的内容 - "tested in versions 2.0.0, 2.1.4 and 2.3.1"。
显然有递减的returns。如果您在 2.1.9 中没有问题,那么您在 2.1.10 中出现问题的可能性很小 - 在某些时候,检查每一个微小的变化,甚至只是查看测试结果,都会比收益更多额外保险。
这个问题的通常答案是测试您的自动化测试环境可以处理的尽可能多的变体,并且您可以不厌其烦地设置和维护。如果您的测试服务提供商为您同时使用 Ruby 的多个版本 - 例如您正在使用 Travis - 那么测试多个版本相对便宜。因此,您也可以尽可能多地了解您希望看到的环境变化 "in the wild" ,因为您可能不愿意看到。