在試圖寫一些單元測試與起訂量,我遇到了一個問題MVVM光的信使類。問題是你怎麼能Mock<IMessenger>();
並驗證收到一條消息,並處理該動作?Moqing MVVM光的IMessenger的
如果使用IMessenger
,編寫測試的正確方法是什麼?我見過很多使用Messenger.Default的示例, 和TestInitialize
方法中的Messenger.Reset()
。我用IMessenger
認爲這將有助於測試能力。
使用Moq驗證郵件是否按照我的預期發送。
[TestMethod]
public void LoadData_SendsUpdateStatusEvents()
{
//Arrange
_mockMessenger.Setup(x => x.Send(It.IsAny<string>(),
It.IsAny<UpdateStatusEvent>()));
//Act
//Assert
_mockMessenger.Verify(x => x.Send(It.IsAny<string>(),
It.IsAny<UpdateStatusEvent>()), Times.Exactly(2));
}
但是,如果我有我的構造此註冊..
_messenger.Register<IUnitsManager>(this, OnUpdatedUnitsEvent);
我寫一個單元測試,以檢查OnUpdatedUnitsEvent運行...
[TestMethod]
public void OnUpdatedUnitsEvent_UpdateUserUnitValueOfAllMaterials()
{
//Arrange
_mockUnits.Object.SetUnitsToMetric();
_mockMessenger.Object.Send(_mockUnits.Object);
//Act
var currentItem = _materialMasterVm.MaterialModels.CurrentItem as MaterialDetailViewModel;
//Assert
Assert.AreEqual(DensitySolidSymbols.KgCm3, currentItem.Density.UserUnitType);
Assert.AreEqual(PressureSymbols.KPa, currentItem.YieldStress);
Assert.AreEqual(PressureSymbols.KPa, currentItem.YoungsModulus);
}
什麼當使用IMessenger和Moq時,推薦使用這種方法嗎?