У меня есть две модели ViewModel, MainWindowShellViewModel (shellVm) и MainWindowContentViewModel (contentVm). ShellVm публикует событие, и contentVm подписывается на него.
Оболочка виртуальной машины выглядит примерно так: Я опустил много деталей.
// ctor
public MainWindowShellViewModel(IEventAggregator eventAggregator)
{
_EventAggregator = eventAggregator ?? throw new ArgumentNullException(nameof(IEventAggregator) + " service injected is null!!!");
_AppStartingClosingEventToken = _EventAggregator.GetEvent<AppStartingClosingEvent>();
}
private void MainWindowShellLoaded()
{
var payload = new AppStartingClosingEventData();
payload.Data = "MainWindowStarting";
_AppStartingClosingEventToken.Publish(payload);
}
AppStartingClosingEvent представляет собой простой способ, как показано ниже.
public class AppStartingClosingEvent : PubSubEvent<AppStartingClosingEventData>
{ }
public class AppStartingClosingEventData
{
public string Data { get; set; }
}
И, наконец, contentVm выглядит следующим образом.
public MainWindowContentViewModel(IEventAggregator eventAggregator)
{
_AppClosingEventToken.Subscribe(AppStartingClosing);
}
private void AppStartingClosing(AppStartingClosingEventData appStartingClosingEventData)
{
if (appStartingClosingEventData.Data == "MainWindowStarting")
LoadState(appStartingClosingEventData);
if (appStartingClosingEventData.Data == "MainWindowClosing")
SaveState(appStartingClosingEventData);
}
Я хочу проверить, что метод AppStartingClosing внутри contentVm вызывается с правильными данными. Я использую Moq
У меня заканчиваются идеи. Пожалуйста, предложите. Пробовал следующее, но пока безуспешно.
Как проверить подписки агрегатора событий Prism на UIThread?
Использование Moq для проверки сбоя подписки на событие Prism
Модульное тестирование с Moq, Prism 6 и агрегацией событий
Moq Event Aggregator Возможно ли это
// Проверка того, что делегат был вызван с помощью Moq
EDIT
Вот что я пробовал.
// Arrange
var mockingKernel = new MoqMockingKernel();
var eventAggregatorMock = mockingKernel.GetMock<IEventAggregator>();
var eventBeingListenedTo = new AppStartingClosingEvent();
eventAggregatorMock.Setup(e => e.GetEvent<AppStartingClosingEvent>()).Returns(eventBeingListenedTo);
var vm = mockingKernel.Get<MainWindowContentViewModel>();
var evData = new AppStartingClosingEventData();
evData.Data = "MainWindowStarting";
// Act
eventBeingListenedTo.Publish(evData);
Теперь, что мне делать? Мне даже не ясно, правильно ли я подошел.