【发布时间】:2013-07-16 14:26:59
【问题描述】:
这是我们反复讨论过的问题,人们对此的看法似乎大相径庭。
基本问题是,在进行 TDD 时,是否应该在循环的重构步骤之后添加额外的单元测试。我不是在谈论你的下一个测试来开始你的下一个周期,而是测试覆盖由于重构而发生的任何变化。
这最好用一个真实的例子来解释。在 TDD 循环的绿色之后,我们有以下代码:
public bool ShouldVerifyDomain
{
get
{
return this.Orders.SelectMany(x => x.Items).Any(x => x.Product.RequiresDomainVerification);
}
}
现在,我看着这个并想,嗯,linq 语句可能会更整洁,更容易阅读,不会过多地违反 Demeter,让我们重构它。所以我在Order 上创建了以下内容:
public bool HasItemsThatRequireDomainVerification
{
get
{
return this.Items.Any(x => x.Product.RequiresCascadeDomainVerification);
}
}
并将ShouldVerifyDomain修改为:
public bool ShouldVerifyDomain
{
get
{
return this.Orders.Any(x => x.HasItemsThatRequireDomainVerification);
}
}
好的,看起来好多了,我对此更满意。让我们继续我列表中的下一个测试......但是......等等,我们现在正在通过另一个对象上的属性测试属性HasItemsThatRequireDomainVerification......这是一个真正的单元测试还是我应该添加一个测试直接测试HasItemsThatRequireDomainVerification。
我的感觉如何?我认为它不会增加太多价值。我认为这会增加套件的维护负担,需要时间,并且在进行未来更改时不会真正给我们更多信心。
它能给我们带来什么? Order的公共接口的“文档”。
想法?
【问题讨论】:
标签: c# unit-testing tdd