15

修正すべきバグがあります。他の優れた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私の場合、オブジェクトの型は抽象基本クラスのサブクラスです。ただそれについて言及したかった。

4

3 に答える 3

12

これは、あなたが探しているものを正確に実行するObject Exporterと呼ばれるツールであり、デバッグウィンドウ内の任意のオブジェクトからC#初期化コードを生成します。

https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f

詳細情報を含むブログ投稿:

http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/

于 2015-02-21T21:51:52.223 に答える
0

私はあなたが探している振る舞いを提供する既存の特徴/機能を知りません。しかし、特定のオブジェクトのコードを生成するビジュアライザーを作成するというアイデアは、単純なオブジェクトタイプ(プリミティブ型のプロパティで構成されるオブジェクト)には適しているようです。それを超えると、タスクはますます困難になります。

ビジュアライザーでは、問題のオブジェクトにアクセスでき、リフレクションなどのトリックを使用してメンバーにアクセスできます。プリミティブ型の場合、メンバーの値をコードとして表すのは簡単です。、、intなどstring...。プロセスが再帰的になり、オブジェクトサイクルを考慮する必要があるため、非プリミティブ型の場合、これははるかに困難です。

これがうまくいく場合は、デバッガビジュアライザーに関する簡単なチュートリアルがあります

全体として、各シナリオを手書きで書く方が簡単かもしれません:(

于 2010-11-17T21:07:46.393 に答える
0

これらの提案は機能しません。 最初の行を読んでください

ObjectまたはArrayを除く、任意の管理対象クラスのオブジェクトのカスタムビジュアライザーを作成できます。

http://msdn.microsoft.com/en-us/library/e2zc529c.aspx

あなたの答えがあります。私が正しく読んでいる場合、それはビジュアライザーを介して実装することはできません。一種のラメ。

于 2011-03-14T17:50:10.680 に答える