如果我将一条消息从 ViewModelA 定位到 ViewModelB,有没有办法从我的单元测试中捕获此通知,该单元测试正在测试引发消息的 ViewModelA?
Messenger.Default.Send<string, ViewModelB>("Something Happened");
如果我将一条消息从 ViewModelA 定位到 ViewModelB,有没有办法从我的单元测试中捕获此通知,该单元测试正在测试引发消息的 ViewModelA?
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 以进行测试。
可能有更多选择,但这些是在这个深夜突然出现在我脑海中的那些......