プロパティを適切に設定するか、結果として他のメッセージを発行することにより、モジュールが適切に応答することを確認するために、イベント集約を介してモジュールにメッセージをスローすることにより、モジュールを単体テストしたいと考えています。私は Prism 6 を使用しています。私のプロジェクトでは、インフラストラクチャ プロジェクトに次のものがあります。
public class ImportantMessage : PubSubEvent<string>
{
}
ModuleA は次のようなメッセージを発行します。
eventAggregator.GetEvent<ImportantMessage>().Publish(importantString);
ModuleB は次のようなメッセージを受け取ります。
eventAggregator.GetEvent<ImportantMessage>().Subscribe(HandleImportantMessage);
これがHandleImportantMessageです:
public void HandleImportantMessage(string importantString)
{
. . .
}
ModuleB コンストラクターは次のように呼び出されます。
ModuleB(IEventAggregator EventAggregator)
このコンストラクターは Prism フレームワークによって呼び出されます。単体テストのために、ModuleB のインスタンスを作成し、IEventAggregator (おそらく Moq によって作成された偽物) を渡す必要があります。そして、公開するメッセージに重要な文字列が含まれるように、これを行いたいと考えています。「moq とイベント集約を使用した単体テスト」というフレーズを Google で検索すると、いくつかの参考文献がありますが、これらのアプローチを使用して ModuleA から ModuleB に「importantString」を渡す方法はわかりませんでした。Prism 5 のサンプル コードは偽のイベント アグリゲーターを作成しますが、Moq は使用しません。それがどのように機能するのか理解できず、文字列を渡す方法がわかりません。
私のテストコードは次のようなものから始まります:
var moqEventAggregator = new Mock(IEventAggregator);
var moqImportantMessage = new Mock<ImportantMessage>();
moqEventAggregator.Setup(x => x.GetEvent<ImportantMessage>());
私が見た参照のいくつかは、.Returns(eventBeingListenedTo.Object); のようなものを適用します。Setup適用後のmoqEventAggregatorへ。importantString を渡すには、明らかに .Setup(something) を moqImportantMessage に適用する必要がありますが、正確にはまだわかりません。
私は何が欠けていますか?偽の公開メッセージで文字列を渡すにはどうすればよいですか?