これは私たちが何度も議論してきたことであり、人々の意見はこれについてかなり異なっているようです.
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);
}
}
OK、それは少し良くなっているように見えます。私はそれで満足しています。私のリストの次のテストに移りましょう...しかし...待ってください、私たちは今HasItemsThatRequireDomainVerification
別のオブジェクトのプロパティを介してプロパティをテストしています....それは本当の単体テストですか、それともテストを追加する必要がありますか? ) を直接テストしHasItemsThatRequireDomainVerification
ます。
私が感じる方法?それが大きな付加価値になるとは思えません。スイートのメンテナンスの負担が増し、時間がかかり、将来の変更に関して自信が持てなくなると思います。
それは私たちに何を与えるでしょうか?のパブリック インターフェイスの「ドキュメント」Order
。
考え?