【发布时间】:2011-01-29 18:08:30
【问题描述】:
我曾多次遇到这种困境。我的单元测试是否应该复制他们正在测试的方法的功能以验证其完整性?或者单元测试是否应该努力使用大量手动创建的输入和预期输出实例来测试方法?
我主要是针对您正在测试的方法相当简单并且可以通过查看代码一分钟来验证其正确操作的情况提出问题。
简化示例(在 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
我了解大多数情况下,您正在测试的方法不够简单,不足以证明这样做是合理的。但我的问题仍然存在; 在某些情况下这是一种有效的方法(为什么或为什么不)?
【问题讨论】:
-
我对第一个场景不太熟悉——单元测试复制了一个方法的功能,你能详细说明一下吗?
-
在测试驱动开发中,我经常创建一个测试来验证(尚未编写的)方法是否按预期工作。在简单的场景中,我经常想以我最熟悉的方式编写这些规范,以编程方式从输入值中获得所需的输出。有时我觉得我在手动计算和输入预期结果时更容易出错,而不仅仅是编写一些代码来完成工作。
-
好问题 - 我想这是 OnceAndOnlyOnce 规则的一个例外......除非我不知道如何正确重构它。
-
我应该给出一个更接近实际提示我提出问题的代码的示例。我正在测试的代码是一个简单的例程,它转换了哈希,将一些键更改为大写,组合了一些键/值对,删除了一些条目......所以 Mark Seemann 的建议听起来是个好主意。跨度>
标签: ruby unit-testing testing tdd