Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby tdd处理过时测试的最佳实践_Ruby_Unit Testing - Fatal编程技术网

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函数:删除该函数并删除其测试

此外,当您的规范发生变化时,您需要重写测试,编写新的测试,甚至删除其中的一些测试

但一般规则是:测试始终是软件当前状态的规范。他们应该明确说明您的软件的用途。没有更多,也没有更少。

好吧,现在我觉得自己很傻。:)非常感谢。这大大澄清了我的困惑。