MVVM Light Messenger - 如何对目标消息进行单元测试?

时间:2010-07-11 23:23:26

标签: mvvm-light

如果我将来自ViewModelA的消息定位到ViewModelB,是否有办法从我的单元测试中捕获此通知,该单元测试正在测试引发Message的ViewModelA?

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

1 个答案:

答案 0 :(得分:6)

我看到两个选项:

首先,您可以使用“标记”界面标记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用于测试目的。

可能有更多的选择,但这些是在这个晚些时候突然出现的问题......