3

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

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

1 回答 1

6

我看到两个选项:

首先,您可以使用“标记”接口标记 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 以进行测试。

可能有更多选择,但这些是在这个深夜突然出现在我脑海中的那些......

于 2010-07-12T05:59:05.260 回答