Как проверить, что метод отказа EventAggregator вызывается при утилизации ViewModel с Prism - PullRequest
0 голосов
/ 06 октября 2011

Я пытаюсь написать тест, который подтверждает, что я правильно отписываюсь от сообщения EventAggregator, когда оно закрыто.Кто-нибудь может указать на (простой) ответ?Следующие установки не были сопоставлены: IssuerSelectedEvent x => x.Unsubscribe (It.IsAny ())

Вот тест:

[Test]
public void UnsubscribeFromEventAggregatorOnDispose()
{            
    var view = new Mock<ICdsView>();
    var ea = new Mock<EventAggregator>();
    var evnt = new Mock<IssuerSelectedEvent>();

    evnt.Setup(x => x.Unsubscribe(It.IsAny<SubscriptionToken>()));

    var vm = new CdsIssuerScreenViewModel(view.Object, ea.Object);

    vm.Dispose();

    evnt.VerifyAll();
}

Ответы [ 3 ]

2 голосов
/ 08 октября 2011

Здесь я проверяю, что Unsubscribe был вызван для смоделированного IssuerSelectedEvent

[Test]
public void UnsubscribeFromEventAggregatorOnDispose()
{            
    var view = new Mock<ICdsView>();
    var ea = new Mock<IEventAggregator>();
    var evnt = new Mock<IssuerSelectedEvent>();

    ea.Setup(x => x.GetEvent<IssuerSelectedEvent>()).Returns(evnt.Object);

    var vm = new CdsIssuerScreenViewModel(view.Object, ea.Object);

    vm.Dispose();

    evnt.Verify(x => x.Unsubscribe(It.IsAny<SubscriptionToken>());
}

Если вы хотите проверить, что точно такой же токен передан в Unsubscribe, тогда вам понадобитсяSetup для метода Subscribe, который возвращает токен, который вы создали в своем тесте.

0 голосов
/ 07 октября 2011

Тесты должны быть изменены на:

[Test]
public void UnsubscribeFromEventAggregatorOnDispose()
{            
    var view = new Mock<ICdsView>();
    var ea = new Mock<IEventAggregator>();
    var evnt = new Mock<IssuerSelectedEvent>();

    ea.Setup(x => x.GetEvent<IssuerSelectedEvent>()).Returns(evnt.Object);
    evnt.Setup(x => x.Unsubscribe(It.IsAny<SubscriptionToken>()));

    var vm = new CdsIssuerScreenViewModel(view.Object, ea.Object);

    vm.Dispose();

    evnt.VerifyAll();
}
0 голосов
/ 06 октября 2011

Вы должны указать свой EventAggregator макет, чтобы вернуть ваш высмеянный IssuerSelectedEvent:

ea.Setup(x => x.GetEvent<IssuerSelectedEvent>()).Return(evnt.Object);
...