这是我们反复讨论过的事情,人们对此的看法似乎有很大不同。
基本问题是,在进行 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
通过另一个对象上的属性测试该属性......这是一个真正的单元测试还是我应该添加一个测试(s ) 直接测试HasItemsThatRequireDomainVerification
。
我的感觉如何?我认为它不会增加太多价值。我认为这会增加套件的维护负担,需要时间,并且在进行未来更改时不会真正给我们更多信心。
它能给我们带来什么?的公共接口的“文档” Order
。
想法?