2009-09-29 6 views
5

私のコードでは、時折、さまざまなバイト配列などが渡されます。また、それらは管理オブジェクトでもよい。私は具体的な例に対してテストケースを書くことができるように、それらのメモリ構造を保存したいと思います。メモリ内のデータ構造を保存して、後でユニットテストで使用する方法

私の標準的なアプローチは、ブレークポイントをヒットし、デバッガを使用してさまざまな値を見つけ出し、新しいものを作成するか、ユニットテストアセンブリにリソースとしてファイルや何かを埋め込むことです。 時には、これは、自分のコードを新しいものにすることができるようにするために、コンポーネントのやりとりの私自身の抽象化を書くことを伴います。

もっと簡単な方法はありますか?私はこれが新しいものだとは想像できません。あなたが通信するために火の中央ユニットが与えられたとしよう。あなたはユニットテストのために作成したいデータグラムを作るためにそれを使います。また、ファイアセントラルが複合メッセージを構成している、文書化されていない方法でバグが発生した場合は、それらの例を記録して保存したいとします。

理想的には、すべての対話を自分のコードに記録し、さまざまな再生シナリオを選択して選択できるようにしたいと考えています。しかし、メモリ内のさまざまなデータグラムの例をデバッガから取得し、単体テストに戻すだけで大いに役立ちます。

提案がありますか?

答えて

4

binary serializationとお試しください。

上記は、情報を保存/ロードしたい部分や、その外部システムとのやりとりをテストするために使用する情報を保持するオブジェクトのためのものです。これらのテストに焦点を絞った統合テストを、残りのコードの単体テストとフォーカスの違いを他のロジックでよりよく把握することをお勧めします。

システム内の残りのコードと外部システムとの特定の統合を行うコードを分離してください。インタフェースの後ろに置くことをお勧めします。これは、システムの残りの部分に対して単体テストを作成するときに置き換えることができます。このようにして、外部システムにぶつかることなくコードのいくつかの側面/ロジックをテストする特別に細工されたシナリオを作成することができます。

+0

+1悪い提案ではありませんが、問題の型がシリアライズ可能であることが必要です –

+0

@マークyは、外部システムとのやり取りのリクエスト/応答のセーブ/ロードについて、私は単純なオブジェクトを考えています。私は同じアプローチで残りのテストに行くことをお勧めしません。 – eglasius

+0

確かに。私は、通信の詳細がサービス層内で明らかになることを許可しません。私は、通信の詳細を扱う特定のビジネスエンティティ(クラスライブラリ)を持っており、これらはテストです。コミュニケーションとビジネスロジックの間には抽象化レイヤーがあります。ありがとうございました。 – Tormod

3

フレディ・リオスが答えているように、ユニット内テストから再利用できるように、メモリ内オブジェクトを永続化する方法が必要です。 Memento design patternが適しています。シリアル化は.NETを実装するためのデフォルトの方法です。

これらのオブジェクトを簡単にキャプチャする方法については疑問が残っています。試してみることができるアプローチは次のとおりです。

要約インタフェースの背後にあるリソースとの通信。それは常に良いデザインの決定です。

これを実行すると、Decorator design patternを使用して、そのインターフェイスの実際の実装をラップすることができます。つまり、インタラクションを記録(シリアライズ)するデコレータを作成できますが、問題のオブジェクトを記録した後はすべての呼び出しを基礎となる実装に委譲します。

トラブルシューティングを行うときに、コードをMemento Decoratorに接続し、後で書かれた場所にファイルを持ち込むことができます。プロダクションコードでは、Memento Decoratorをスキップして、実際の実装を直接使用します。

あなたが本当に空想になりたい場合は、それが記録された相互作用を模倣するユニットテストコードを発するように、あなたもメメントデコレータを実装することができますが、これは努力のかなりの量を必要とする可能性がある...

+0

キャプチャコードをフックする方法に関する具体的な解決方法は+1です。 – eglasius

+0

デコレータのアイデアにはメリットがあるかもしれません。私は暖かいかどうかはわかりませんが、デコレータがコミュニケーションされた小塊が興味深いかどうかを知るために必要な知識にアクセスできるようになります。しかし、元のデータグラムがエラーメッセージペイロードの一部としてそのまま残っているかどうかを確認する良い方法かもしれません。また、設定で有効/無効にするのは簡単です。ありがとうございました。 – Tormod

+0

@Tormod:ブロブが面白かったかどうかを評価することについての質問は正しいです。あなたは単にすべてを記録し、いくつかの期限切れポリシーに従って物を削除するか、記録するかどうかを決定するために何らかの種類のヒューリスティックを実装する必要があります。私はあなたの環境の詳細を知らないので、私はそのための特別な解決策はありません。 –

関連する問題