MVVM Light Messenger - Как вы тестируете целевые сообщения? - PullRequest
3 голосов
/ 12 июля 2010

Если я нацеливаю сообщение от ViewModelA на ViewModelB, есть ли способ перехватить это уведомление из моего модульного теста, который тестирует ViewModelA, где создается сообщение?

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

1 Ответ

6 голосов
/ 12 июля 2010

вижу два варианта:

Во-первых, вы можете пометить 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 для целей тестирования.

Могут быть и другие варианты, но это те, которые всплывают в мою голову в этот поздний час ...

...