9

データベースからロードするかなり複雑なオブジェクトがあるシナリオがあります。ウォッチウィンドウでオブジェクトを取得し、それを "スクリプト"する方法

このオブジェクトにはいくつかのネストされたオブジェクトがあります。私がデバッグしている間、私はユニットテストで使用したいこのオブジェクトのインスタンスを見つけます。今は、このオブジェクトを手動で作成する必要があります。かなり複雑なので、しばらく時間がかかります。

この変数をテキストウィンドウ(またはクリップボード)に出力するようウォッチウィンドウに指示する方法がある場合は、私の単位テスト時間を費やすほうがよいでしょう。

必要な情報はすべてウォッチウィンドウに表示されているようです。

私はステートメントやそのようなものを使って作成することを期待していません。クラス情報を使用して、newステートメントを作成します(オブジェクトが移動するのと同じレベルでネストされます)。

このようなツールはありますか? (多分私はちょうど私の幸運を作るための方法を発見していない場合は?)

+1

**即時**ウィンドウを試して、オブジェクトを移動中に**デバッグ**に出力してください。あなたの人生を楽にするために、このトラバーサルメソッドを自分自身で準備し、それを直接ウィンドウで呼び出すと、デバッグすることができます。それをJSONに変換してテストコードでその文字列を使用して、具体的なインスタンスに戻します。 JSON文字列から。おそらく最も簡単な解決策です。 –

+0

もちろん、ウォッチウィンドウのオブジェクトを右クリックしてコンテキストメニュー項目を追加するVS拡張機能を記述して、** JSONをクリップボードに置くことができます**。私は多くの人がそれをインストールして嬉しいと思います。まさにあなたが提供したのと同じ理由で。 –

+0

+1私の質問は間違いありません。 – adamdport

答えて

2

私が知っているそのようなツールがあるため、これを行うことは非常に複雑です...ありません:オブジェクトは循環参照を持っているかもしれ

  • したがって深さに制限はありません
  • シングルトンオブジェクトへの参照がある可能性があります
  • コンストラクタでパラメータをとるオブジェクトへの参照があります。どのようにオブジェクトを構築するかを知ることができますか? publicコンストラクタを持っていない、と工場によって構築されたオブジェクトへ
  • または参照の代わりにCOMへ
  • や参照が実行している間だけ意味するオブジェクトへ
  • または参照オブジェクト:たとえば、ファイルストリームを

簡単な解決方法:オブジェクトをxmlやjsonなどにシリアル化してシリアル化し、シリアル化された文字列をユニットテストにコピーし、ユニットテストでデシリアライズします。

それほど簡単な解決策:あなたは、おそらく使用する必要があります... Debugger Visualizer and "Type is not marked as serializable"

ウィンドウを作成し、シリアル化されたオブジェクトを表示することができますこの方法:はビジュアライザオブジェクトソースと、デバッガビジュアライザを実装すべてのオブジェクトのプロパティを読み取るためのリフレクション、および子オブジェクトなどが含まれます。

+0

サイクルを避けることができます...しかし、少しメモリ消費...;) –

+0

サイクルを避けることは複雑です...しかし、私はそれのようなツールを作成することが不可能になる可能性のあるいくつかの他のものを挙げました。 –

+1

それでは、どのようにしてそれを直列化することができるでしょうか?シリアライゼーションツールは、カスタムコードと同じように魔法全体を処理します。それはXML、JSON、またはその他のシリアル化である –

関連する問題