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

Jef*_*raf 3 mvvm-light

如果我的目标从ViewModelA到ViewModelB消息,有没有办法赶上从被测试ViewModelA该消息引发我的单元测试此通知?

Messenger.Default.Send<string, ViewModelB>("Something Happened");
Run Code Online (Sandbox Code Playgroud)

Chr*_*nig 6

我看到两个选择:

首先,您可以使用"标记"界面标记ViewModelB,并使用它而不是实际的类名.

Messenger.Default.Send<string, IMessageTarget>("Something Happened"); 
Run Code Online (Sandbox Code Playgroud)

这不是我最喜欢的解决方案,但应该可行.

或者,您可以在ViewModelB中注册具有特定令牌的消息,同时从ViewModelA发送消除歧义的消息:

在ViewModelA中:

Messenger.Default.Send<string>("Something Happened", "MessageDisambiguator");
Run Code Online (Sandbox Code Playgroud)

在ViewModelB中:

Messenger.Default.Register<string>(
    this, 
    "MessageDisambiguator", 
    (action) => DoWork(action)
);
Run Code Online (Sandbox Code Playgroud)

更清洁,仍然允许您模拟ViewModelB进行测试.

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