我对TDD很新。我正在阅读TDD By Example并且它说“从不尝试使用相同的常量来表示不止一件事”并且它显示了Plus()
方法的示例。
在我看来,Plus(1,1)使用相同的常数值和Plus(1,2)之间没有区别。我想知道在测试方法中使用相同的常量值有什么优缺点?
答案 0 :(得分:5)
我认为你误解了这个说法。作者(imho)试图表达的是,以下代码是灾难的一种方法。
const SomeRandomValue = 32;
...
// Plus testcase
Plus(SomeRandomValue, SomeRandomValue)
...
// Divide testcase
Divide(SomeRandomValue, SomeRandomValue)
您有两个测试用户重复使用无描述性常量。没有办法知道将SomeRandomValue
更改为0
您的测试套件会失败。
更好的命名就像是
const AdditionValue = 32;
const DivisorValue = 32;
...
// Plus testcase
Plus(AdditionValue, AdditionValue)
...
// Divide testcase
Divide(DivisorValue, DivisorValue)
在哪些常量用于显而易见的地方。在创建测试用例时,不应该让 挂起代码重用的想法。
或换句话说:
我认为在多个测试用例中重用
DivisorValue
常量没有任何问题>但是,在代码重用的名义下,试图将一个值变成一个无描述性的变量肯定是错误的。
答案 1 :(得分:1)
如果您在测试中使用相同的值 - 例如Plus(1, 1)
- 您的代码可能会出错。以下是Plus
的实现,它将通过此类测试,但未通过具有不同值的测试。
public int Plus (int a, int b) {
return a + a;
}
避免这种风险的测试比允许这样的错误的测试更好。