3

ViewModelA から ViewModelB へのメッセージを対象とする場合、メッセージが発生する ViewModelA をテストしている単体テストからこの通知をキャッチする方法はありますか?

Messenger.Default.Send<string, ViewModelB>("Something Happened");
4

1 に答える 1

6

2 つのオプションが表示されます。

まず、ViewModelB を「マーカー」インターフェイスでマークし、実際のクラス名の代わりにそれを使用できます。

Messenger.Default.Send<string, IMessageTarget>("Something Happened"); 

これは私のお気に入りのソリューションではありませんが、うまくいくはずです。

または、ViewModelA から明確化されたメッセージを送信しながら、ViewModelB で特定のトークンを使用してメッセージを登録できます。

ViewModelA で:

Messenger.Default.Send<string>("Something Happened", "MessageDisambiguator");

ViewModelB で:

Messenger.Default.Register<string>(
    this, 
    "MessageDisambiguator", 
    (action) => DoWork(action)
);

はるかにクリーンで、テスト目的で ViewModelB をモックアウトすることもできます。

他にも選択肢があるかもしれませんが、これらはこの遅い時間に頭のてっぺんに浮かぶものです...

于 2010-07-12T05:59:05.260 に答える