スレッドが特定の値を受け取るのを待つメソッド呼び出しをユニットテストしようとしています。スレッドは1秒に数回インターフェイスからポーリングを行い、情報がない場合はデフォルトのメッセージタイプ0を受け取ります。しかし、スレッドが0よりも上の特定のメッセージタイプを受信すると、それに応答します。私の場合、特定の値が待機を中断し、メソッドが結果を返します。しかし、私はこれをMoqにどのように設定するのですか?Moqが特定の値を返すまでデフォルト値を何度も返すように設定する
この質問は既知のシーケンスを返すことではなく、既知の値が予想されるまで不明な連続シーケンスを返すことについての質問です。ここで
は私がこれまでに得たものである:
mockedFacade.Setup(facade => facade.RequestPayment()).Callback(
() =>
{
CallbackMessageService.AddMessage(new CallbackMessage{Type = 2, Value = 1});
}).Verifiable();
mockedFacade.Setup(facade => facade.GetCallbackMessage()).Returns(CallbackMessageService.GetNextMessage());
私はCallbackMessageServiceと呼ばれるメッセージを作成するためのテスト・システムを構築します。 Facadeがfacade.GetCallbackMessage(2番目の設定)を呼び出すと、デフォルトでタイプ0のメッセージが返されます。テスト中にCallbackMessageServiceを呼び出して、CallbackMessageService.AddMessage(第1のセットアップ)経由でメッセージを追加することができます。次回facade.GetCallbackMessage()が呼び出されると、システムはその特定のメッセージを返します。
CallbackMessageServiceは機能しますが、問題は、GetCallbackMessage(2番目の設定)の設定が、CallbackMessageServiceから受信した最初のメッセージを何らかの形でキャッシュしていることです。その後、常にキャッシュされたメッセージが返され、CallbackMessageService.GetNextMessage()は再び呼び出されません。セットアップが必要なので、facade.GetCallbackMessage()が呼び出されるたびにCallbackMessageService.GetNextMessage()が常に呼び出されます。
Moqでどのように達成できますか?
私はキャッシュがMoqのデフォルトのものだと思っています。私はSetupSequenceについて知っています。問題は、特定の値を返す前に処理しなければならないデフォルト値の数を制御できないことです。
問題を特定するためにいくつかのコードを削除しました。少しの文脈があるかどうか私に教えてください。
[Moqで1回目と2回目の異なる戻り値]の可能な複製(https://stackoverflow.com/questions/7287540/different-return-values-the-first-and-second-time-with-moq ) – krillgar
@krillgar私はこれがこれらのタイプの質問と重複しているように見えますが、これらの質問は私の場合は常に正確な返品構造を知っています。特定の型を返す前に、無制限のデフォルトの型に0を受け取ることができます。 – evilfish