4

私が書いているMSMQアプリケーションの一連の自動化された単体テストを作成したいと思います。私が見ているように、課題は、テストメソッドからのイベントハンドラーにどのように対応するかです。つまり、テストメソッドからメッセージを送信し、メッセージが受信されて処理されたという結果をそのテストメソッドに返す必要があります。私はこれをどのように達成するかについての手がかりがありません、そしてどんな方向でも大いに感謝されるでしょう。

4

2 に答える 2

1

通常、単体テストでは、テスト対象のメソッドを分離する必要があります。私はMSMQに精通していませんが、通常はモックオブジェクトを作成し、それを本番メソッドに渡します。次に、メソッドがモックオブジェクトに対して何をしたかを感知して、その動作が正しく行われていることを確認し、期待される応答を送信できます。製造方法は違いを知りません。単体テストは、メソッドが単独で期待どおりに動作していることを確認するためのものです。

サウンドは、あなたが探しているのは統合テストのようなものです。単体テストフレームワークを使用してこれを実現することはできますが、自動ビルドには含めません。それらを専用のテストマシンに移動します。単体テストは通常​​、期待どおりに動作していないクラスまたはメソッドを示しているため、ビルドを停止します。統合テストが示しているように、メソッドまたはクラスは期待どおりに相互作用していません。

于 2009-05-06T19:42:28.823 に答える
1

テスト対象のシステムがキューからイベントを受信して​​いると見なす単体テストを作成する方法を探していますが、テスト中に実際のキューを使用したくないですか?

RhinoMocksをチェックしてください。キューインターフェイスのモックバージョンを作成し、テスト中にそこからイベントを発生させることができます。Requester.DoSomething()メソッドをテストするためのいくつかの擬似コードは次のようになります。

// SETUP
MockRepository mocks = new MockRepository();
IQueue mockQueue = mocks.StrictMock<IQueue>();

queue.Received+=null;//create an expectation that someone will subscribe to this event
LastCall.IgnoreArguments();// we don't care who is subscribing
IEventRaiser raiseReceivedEvent = LastCall.GetEventRaiser();//get event raiser for the last event, in this case, Received
Expect.Call(mockQueue.Send).Return(msgId);
mocks.ReplayAll();

// EXEC
Requester req = new Requester(mockQueue);

// We expect this method to send a request to the mock queue object.
req.DoSomething();
// Now we raise an event from the mock queue object.
raiseReceivedEvent.Raise(eventArgs);

// VERIFY
// we would probably also check some state in the Requester object
mocks.VerifyAll();

詳細については、Rhinoモックウィキをご覧ください。

于 2009-05-13T18:29:18.820 に答える