5

私のコードでは、さまざまなバイト配列などが渡されることがあります。また、管理オブジェクトの場合もあります。具体的な例に対してテスト ケースを記述できるように、これらのメモリ構造を保持したいと考えています。

私の標準的なアプローチは、ブレークポイントに到達し、デバッガーを使用してさまざまな値を見つけてから、それらを新しくするか、ファイルまたは何かをユニット テスト アセンブリにリソースとして埋め込むことです。場合によっては、これには、コンポーネントの相互作用の独自の抽象化を作成して、新しく追加できるものに依存するコードを作成することが含まれます。

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

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

助言がありますか?

4

2 に答える 2

4

バイナリ シリアル化を試してください。

上記は、情報を保存/ロードしたい部分、またはその外部システムとの相互作用をテストするために使用する情報を保持するいくつかのオブジェクトのためのものです。これらのテストを統合テストに焦点を当てたものと呼ぶことを好みます。これは、コードの残りの部分の単体テストと、他のロジックを使用した場合の焦点の違いをよりよく捉えるためです。

外部システムとの特定の統合を行うコードを、システム内の残りのコードから分離するようにしてください。システムの残りの部分の単体テストを作成するときに置き換え/モックできるように、インターフェイスの背後に配置することをお勧めします。このようにして、外部システムに影響を与えずにコードのいくつかの側面/ロジックをテストする特別に作成されたシナリオを作成できます。つまり、多くのシナリオを数秒で実行できます。

于 2009-09-29T07:59:25.177 に答える
3

Freddy Rios が回答で示唆しているように、単体テストから再利用できるように、メモリ内オブジェクトを永続化する何らかの方法が必要です。Memento デザイン パターンは良い出発点であり、シリアル化はそれを実装する .NET の既定の方法です。

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

インターフェイスの背後にあるリソースとの間の通信を抽象化します。それは常に良い設計上の決定です。

これを行うと、Decorator デザイン パターンを使用して、そのインターフェイスの実際の実装をラップできます。これは、対話を単純に記録 (シリアル化) するデコレータを作成できることを意味しますが、問題のオブジェクトを記録した後、すべての呼び出しを基になる実装に委譲します。

トラブルシューティングを行うときは、コードを Memento Decorator に接続し、後でファイルが記述された場所にあるファイルを取得できます。本番コードの場合、Memento Decorator をスキップして、実際の実装を直接使用するだけです。

本当に凝ったものにしたい場合は、Memento Decorator を実装して、記録されたインタラクションを模倣する単体テスト コードを発行することもできますが、これにはかなりの労力が必要になる可能性があります...

于 2009-09-29T08:14:13.993 に答える