gpt4 book ai didi

ruby - 单元测试应该复制功能还是测试输出?

转载 作者:数据小太阳 更新时间:2023-10-29 06:34:43 25 4
gpt4 key购买 nike

我曾多次遇到这种困境。我的单元测试是否应该复制他们正在测试的方法的功能以验证其完整性?或者单元测试是否应该努力用大量手动创建的输入和预期输出实例来测试该方法?

我主要针对以下情况提出问题:您正在测试的方法相当简单,并且可以通过浏览代码一分钟来验证其正确操作。

简化示例( ruby ):

def concat_strings(str1, str2)
return str1 + " AND " + str2
end

上述方法的简化功能复制测试:

def test_concat_strings
10.times do
str1 = random_string_generator
str2 = random_string_generator
assert_equal (str1 + " AND " + str2), concat_strings(str1, str2)
end
end

我知道大多数情况下,您正在测试的方法不够简单,不足以证明这样做是合理的。但我的问题仍然存在; 在某些情况下这是一种有效的方法吗(为什么或为什么不)

最佳答案

使用相同的实现来测试功能,不会测试任何东西。如果其中一个有错误,另一个也会有。

但是通过与替代实现进行比较来进行测试是一种有效的方法。例如,您可以通过将迭代(快速)方法与计算斐波那契数的简单递归但速度较慢的相同方法的实现进行比较来测试它。

它的一个变体是使用一个只适用于特殊情况的实现。当然,在这种情况下,您只能将其用于此类特殊情况。

在选择输入值时,大多数情况下使用随机值并不是很有效。我更喜欢任何时候精心选择的值(value)观。在您给出的示例中,想到了空值和极长的值,这些值在连接时不适合 String 。

如果您使用随机值,请确保您有办法使用相同的随机值重新创建准确的运行,例如通过记录种子值,并有办法在开始时设置该值。

关于ruby - 单元测试应该复制功能还是测试输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2482373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com