我正在努力編寫一個測試,以確認在關閉時正確取消訂閱EventAggregator的消息。任何人都可以指出(簡單)的答案?!如何在使用Prism處置ViewModel時驗證EventAggregator的取消訂閱方法
下面是代碼:
public class ViewModel : BaseViewModel, IViewModel
{
private readonly IEventAggregator eventAggregator;
private SubscriptionToken token;
IssuerSelectedEvent issuerSelectedEvent;
public ViewModel(IView view, IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
View = view;
issuerSelectedEvent = eventAggregator.GetEvent<IssuerSelectedEvent>();
token = issuerSelectedEvent.Subscribe(SelectedIssuerChanged, true);
}
private void SelectedIssuerChanged(IssuerSelectedCommand obj)
{
Console.WriteLine(obj);
}
public IView View { get; set; }
public override void Dispose()
{
issuerSelectedEvent.Unsubscribe(token);
}
}
測試失敗:
Moq.MockVerificationException:下面設置不匹配: 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();
}
謝謝 - 我嘗試之前,得到了 'System.NotSupportedException:無效設置一個非虛擬(在VB重寫)構件上:X => x.GetEvent()' 當然,我也需要爲IEventAggregator創建一個模擬,而不是EventAggregator,所以現在可以工作 –