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

3

如果我从ViewModelA向ViewModelB发送一条消息,有没有一种方法可以在测试ViewModelA的单元测试中捕获此通知,其中消息被触发?

Messenger.Default.Send<string, ViewModelB>("Something Happened");
1个回答

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进行测试。

可能还有更多选项,但这些是我在这个深夜想到的...


是的,谢谢Chris,我使用了第二个选项,这对我来说似乎非常好。也许在令牌中,我会创建一个MessengerSimpleTokens枚举,而不是一个字符串。 - Jeff Zickgraf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接