ruby tdd处理过时测试的最佳实践
我在代码战中遇到了一个非常基本的挑战。挑战在于试驾一种返回一组平方和的方法 到目前为止,我的测试是:ruby tdd处理过时测试的最佳实践,ruby,unit-testing,Ruby,Unit Testing,我在代码战中遇到了一个非常基本的挑战。挑战在于试驾一种返回一组平方和的方法 到目前为止,我的测试是: describe "square method" do it "should return the square of a number" do Test.assert_equals(squareSum(4), [16]) end it "should return the square of multiple numbers" do Test.ass
describe "square method" do
it "should return the square of a number" do
Test.assert_equals(squareSum(4), [16])
end
it "should return the square of multiple numbers" do
Test.assert_equals(squareSum(4, 2, 3), [16, 4, 9])
end
end
我的代码是:
def squareSum(*numbers)
numbers.map { |num| num ** 2 }
end
现在我需要改变它,使之相加。在我看来,这必然会否定之前的两次测试。就TDD最佳实践而言,考虑到前两个场景不是我想让方法实现的,我测试它们是否荒谬可笑?我应该如何进行下一次测试
我应该:
- 删除前两个测试,因为一旦我更改方法,它们将失败
- 找到一种方法使之前的两次测试不会失败,即使我改变了它
describe "squareSum method" do
it "should return the sum of the squares of the numbers passed" do
Test.assert_equals(squareSum(1, 2, 2), 9)
end
end
使用代码使其工作。我只是想知道关于试驾这类问题的最佳实践是什么,因为我想测试我可以在返回和之前返回多个数字的平方。我的“最终”代码将使初始测试过时。这是一个“在最终解决方案中,我的工作应该有多少?”的问题,我想这是一个挑剔的问题,也是一个保留肛门的问题。但是我很好奇。既然测试是针对您打算编写的软件的规范,那么问题是为什么要为您不想要的东西编写规范(因为挑战的任务不是编写一个与其参数平方的函数) 首先,您应该为“返回平方数组和的方法”编写一个规范。这个测试一开始是红色的 然后,您可能会决定需要一个将其参数(或给定数组的元素)平方的函数作为中间步骤。为此函数编写一个测试。通过实现这样一个功能使其成为绿色 最终,将所有内容放在一起,并使初始测试变为绿色(您的主函数可以使用helper函数并汇总其返回值) 不,你可以重构。如果在重构期间您决定不再需要helper函数:删除该函数并删除其测试 此外,当您的规范发生变化时,您需要重写测试,编写新的测试,甚至删除其中的一些测试 但一般规则是:测试始终是软件当前状态的规范。他们应该明确说明您的软件的用途。没有更多,也没有更少。好吧,现在我觉得自己很傻。:)非常感谢。这大大澄清了我的困惑。