这是我们反复讨论的内容,人们的观点在这方面似乎差异很大。在TDD重构之后编写更多的单元测试
基本问题,在做TDD时,应该在循环的重构步骤之后添加额外的单元测试。我不是在谈论你的下一个测试来开始你的下一个周期,而是测试来覆盖由于重构而产生的任何变化。
这可以用一个真实的例子来解释。一个TDD周期,我们有以下的代码的绿色后:
public bool ShouldVerifyDomain
{
get
{
return this.Orders.SelectMany(x => x.Items).Any(x => x.Product.RequiresDomainVerification);
}
}
现在,我看这一点,并认为,hmmmm,那LINQ说法可能有点整洁,有点更容易阅读,不违反迪米特相当这么多,让我们重构一下。所以我创建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);
}
}
OK,那是找一个好一点,我与快乐。让我们继续对列表中的下一个测试......但是......等等,我们现在通过另一个对象上的属性测试属性HasItemsThatRequireDomainVerification
....是一个真正的单元测试还是应该添加一个测试( s)直接测试HasItemsThatRequireDomainVerification
。
我感觉如何?我不认为这会增加很多价值。我认为这会增加套件的维护负担,需要时间,并且在进行未来更改时不会给我们更多的信心。
它可能给我们什么?公开界面Order
的“文档”。
想法?
为什么downvote? – Skyp