1

我对 TDD 很陌生。我正在阅读TDD By Example,它说“永远不要尝试使用相同的常数来表示不止一件事”,并且它显示了一个Plus()方法示例。

在我看来,使用相同常量值的 Plus(1, 1) 和 Plus(1, 2) 之间没有区别。我想知道在测试方法中使用相同的常数值有什么优缺点?

4

2 回答 2

5

我认为您误解了该声明。作者(恕我直言)试图传达的是,以下代码是灾难的根源。

const SomeRandomValue = 32;
...
// Plus testcase
Plus(SomeRandomValue, SomeRandomValue)
...
// Divide testcase
Divide(SomeRandomValue, SomeRandomValue)

您有两个测试用例重用了一个非描述性常量。没有办法知道更改SomeRandomValue0您的测试套件会失败。

一个更好的命名是这样的

const AdditionValue = 32;
const DivisorValue = 32;
...
// Plus testcase
Plus(AdditionValue, AdditionValue)
...
// Divide testcase
Divide(DivisorValue, DivisorValue)

常量的用途应该很明显。在创建测试用例时,您不应该拘泥于代码重用的想法。

或者换句话说:

我认为在多个测试用例中重用该常量没有任何问题DivisorValue> 但是试图以代码重用的名义将一个值硬塞到一个非描述性变量中肯定是有问题的。

于 2012-05-20T14:32:54.740 回答
1

如果您在测试中使用相同的值 - 就像在Plus(1, 1)- 您的代码可能会因为错误的原因而工作。这是一个实现Plus,它将通过这样的测试,但通过不同值的测试失败。

public int Plus (int a, int b) {
    return a + a;
}

避免这种风险的测试比让此类错误溜走的测试更好。

于 2012-05-21T17:53:56.307 回答