3
如果我將一個從ViewModelA到ViewModelB的消息作爲目標,有沒有一種方法可以從我的單元測試中捕獲這個通知,這個通知正在測試引發消息的ViewModelA?MVVM Light Messenger - 你如何測試有針對性的消息?
Messenger.Default.Send<string, ViewModelB>("Something Happened");
如果我將一個從ViewModelA到ViewModelB的消息作爲目標,有沒有一種方法可以從我的單元測試中捕獲這個通知,這個通知正在測試引發消息的ViewModelA?MVVM Light Messenger - 你如何測試有針對性的消息?
Messenger.Default.Send<string, ViewModelB>("Something Happened");
我看到兩個選項:
首先,你可以用一個「標記」的界面和使用標記ViewModelB,與其實際的類名。
Messenger.Default.Send<string, IMessageTarget>("Something Happened");
這不是我最喜歡的解決方案,但它應該工作。
或者,你可以在ViewModelB特定的標記,同時發送從ViewModelA消歧的消息的消息登記:
在ViewModelA:
Messenger.Default.Send<string>("Something Happened", "MessageDisambiguator");
在ViewModelB:
Messenger.Default.Register<string>(
this,
"MessageDisambiguator",
(action) => DoWork(action)
);
很多更清潔,並且仍然允許您爲測試目的模擬ViewModelB。
可能有更多的選擇,但這些都是流行到我的頭在這麼晚的時候頂部的...
是的,謝謝克里斯,我用了第二個選項,這似乎很對我好。也許不是字符串,對於令牌,我會創建一個MessengerSimpleTokens枚舉。 – 2010-07-13 13:30:59