TDDを通じてマッピング機能の作成:あまりにも多くの時間を過ごしたライティングテストを?
-
21-09-2019 - |
質問
私は大きなTDD愛好家だし、いつも私が書いているコードの正しい動作を保証するために、生産のコードを書く前にテストを書くために努力しています。時折、しかし、方法の特定の種類のテストの大きな体を記述することが賢明である場合には、いくつかの質問。これは、マッパークラスを書くときに最も頻繁に出てくるようです。
public class FooBarMapper
{
public Foo MapToFoo(Bar bar)
{
return new Foo
{
Id = bar.Id,
Name = bar.Name,
FooYuk = bar.Beverage,
/* ... */
};
}
}
上にマップする約ダース特性が存在すること、例えば言います。 TDD環境では、マッピングのいずれかを書き込む前に、私はおそらくテストを記述します。 MapToFooMapsBeverageToFooYuk()
ような何か。テストでは、それが通過するためにコードを書くために私をリードし、失敗しました。私は、マップへの各プロパティのためにこれを繰り返します。質問です:この撮影テストファースト開発は遠すぎますか?私はむしろコードはまったく同じものを私に言ってテストの完全なスイートを持っているだろうと私は個人的には、そうは思いませんが、私はコミュニティがどう思うか聞いてみたいです。
解決
でもアンクルボブ・マーティン、TDDとすべてのものTDDの忠実な擁護者は、あなたが(些細なプロパティがちょうど取得し、メンバ変数を設定し、プロパティとして定義されているすべての些細な性質のためのユニットテストを記述する必要はありませんと言っています)。
あなたは(私はあなたがないだろう)副作用を持つプロパティを記述する場合は、、の後、のあなたはそれにユニットテストを追加することができます。 DuffyMoが指摘するようにあなたの特性は、機能テストでカバーされている場合は何のの仕様が存在しないため、ユニットテストは必要ないはずです。の機能のあなたは些細な取得よりも、ユニットテストで他を定義しています/設定します。
他のヒント
多分これが何であるかを FitNesseののために生まれた。
この例では、私は一度にすべての些細な性質をテストする単一のテストを記述します。それは、物事を行うには、かなり標準的な方法ではないのですが、最終的に、個々の些細な性質のためのテストは、おそらくすべてのプロパティのための単一のテストにリファクタリングされるだろう。プロパティは些細なので、私はあなたが終了していると思いますテストでオフに開始する提案ます。
最初の3つのプロパティをマッピングした後、私は重複を見るであろうし、プロパティを反復処理し、リフレクションを使用してそれらを割り当てることによって、それを交換してください。ソースオブジェクトが期待される特性を持っていない、ターゲットオブジェクトが期待される特性を持っていない、0プロパティ、1人の財産、5つのプロパティ:それはいくつかのテストを必要とします。今、私はすべてのアプリケーションで他のどこでも、この一般的なマッピングエンジンを再利用することができますし、私はそれを、私はそれを使用するたびに確認する必要はありません。