假设我正在开发一种方法,我可以传入两个数字并获得最高数字.由于我正在做这种TDD风格,我将进行十几次单元测试并提出以下实现:
public int GetHighestNumber(int x, int y)
{
if (x > y) return x;
else return y;
}
Run Code Online (Sandbox Code Playgroud)
这非常有效.
测试已用于创建实现.实施完成后,保持这些单元测试有什么意义?这就像在房子交付后将脚手架放在房子周围.
我不是在寻找单元测试的原因,或者是否/何时使用TDD.我只是好奇为什么在代码完全实现后应该保留单元测试,而不是将这些测试作为临时手段,并在不需要支持开发人员时删除.
编辑
在对CodeGnome发表评论后,我意识到我应该强调这只是关于TDD测试,这些测试主要是为了让开发人员指向正确的方向.脚手架可以这么说.
我很欣赏所有的评论.
阅读完所有消息后,我可以得出两件事:
现实生活中的代码几乎从未"完成".
需求变化和扩展.功能已添加.尽管有TDD,还有一些问题需要解决.
单元测试也可用作回归测试,以证明代码在这些更改后仍然有效.这实际上是单元测试中最有价值的方面(任何TDD支持者声称设计优势自欺欺人并不重要).
有几个原因(至少)浮现在脑海中:
编辑
"将不会对该方法进行任何更改,并且该级别的回归测试是不必要的"
直到一些聪明人到达并将代码更改为
if (x - y > 0) return x;
else return y;
Run Code Online (Sandbox Code Playgroud)
(是的,它可以并且将会发生,如果不是在那个方法中,在其他地方).
希望您的测试之一是:
assertEquals(Integer.MAX_VALUE, GetHighestNumber(Integer.MIN_VALUE, Integer.MAX_VALUE));
Run Code Online (Sandbox Code Playgroud)
那个测试会失败.
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |