修正すべきバグがあります。他の優れたTDD実践者と同様に、最初にバグを表すために失敗したテストを作成したいと思います。バグは、入力としてかなり複雑なタイプをとるメソッドにあります。このバグは、複合型にプロパティ値の特定の組み合わせが設定されている場合にのみ再現されます。
これまでのところ、バグを再現しており、デバッガーで複合型の実行時の値を表示できます。次に、単体テストの「配置」セクションでその複合型を作成して、単体テストの「実行」セクションのバギーメソッドにフィードできるようにする必要があります。
次のような大きなオブジェクト初期化コードブロックを手動で記述できます。
var cats =
new List<Cat>
{
new Cat {Name = "Sylvester", Age = 8},
new Cat {Name = "Whiskers", Age = 2}
};
またはこのようなものでさえ:
var cats = new List<Cat>();
var cat1 = new Cat();
cat1.Name = "Sylvester";
cat1.Age = 8;
cats.Add(cat1);
var cat2 = new Cat();
cat2.Name = "Whiskers";
cat2.Age = 2;
cats.Add(cat2);
そこには何も派手なものはありません。唯一の問題は「手作業」の部分です。私の場合の複雑なタイプは、上記の例ほど簡単ではありません。
デバッガー内で、組み込みのデバッガービジュアライザーを使用してオブジェクトを表示することもできます。そこで、オブジェクト初期化コードを生成するカスタムデバッガビジュアライザーを作成することにしました。これを使用するには、デバッガーで問題を再現し、QuickWatchウィンドウをプルアップして、カスタムビジュアライザーを選択します。
別のオプションは、オブジェクト初期化コードのブロックに「シリアル化」するカスタムシリアル化実装を作成することです。これを使用するには、QuickWatchウィンドウを表示するよりも少し難しいですが、これは機能する可能性があります。
私がこの問題に自分で取り組む前に、誰かがこのようなことをしたことがありますか?コードスニペットを共有してもよろしいですか?または、誰かが別のアプローチを提案しますか?
PS私の場合、オブジェクトの型は抽象基本クラスのサブクラスです。ただそれについて言及したかった。