arabiriminde bildirilen olay yükseltmek Olay soyut sınıf alay olay yükseltmek için çalışırken birim testi ve alma istisna alıyorum. İşte örnek kod:C# ve Moq, soyut sınıf mock
public abstract class AbstractBase : EntityObject
{}
[TestMethod]
public void MyTest()
{
var mock = new Mock<AbstractBase>();
var notificationMock = entityMock.As<INotifyPropertyChanged>();
var propertyChangedMapper = new PropertyChangedMapper();
bool eventReceived = false;
propertyChangedMapper.MyPropertyChanged +=
(sender, eventArgs) =>
{
eventReceived = true;
};
propertyChangedMapper.Subscribe((AbstractBase)notificationMock.Object);
Assert.IsFalse(eventReceived);
notificationMock.Raise(e=>e.PropertyChanged += null,
new PropertyChangedEventArgs("Property1"));
Assert.IsTrue(eventReceived);
}
Açıkçası ben INotifyPropertyChanged
üzerinde alay kullanabilir ve olay gayet yükseldi, ancak Mock<INotifyPropertyChanged>
EDIT kullanılıyorsa PropertyChangedMapper
iç ben başarısız AbstractBase
gönderenin döküm gerekir: Mock.As<>()
kullanarak öneriye gitmek için doğru yol gibi görünüyor, yukarıdaki tek sorun, olay notificationMock
yükseldi nesnenin orijinal alay ile ilgisi yok olmasıdır. Kod:
notificationMock.Object.PropertyChanged += (s, e) =>
{
var result = "this one is fired as it should";
};
mock.Object.PropertyChanged += (s, e) =>
{
var result = "this one is not called but is actually what I need";
};
notificationMock.Raise(e => e.PropertyChanged += null,
new PropertyChangedEventArgs("Property1"));
O sürece kimse denilen olsun sürece, çağıran hangisinin önemi yoktur. Benim tahminim aslında birini ya da diğerini kurabiliyor olman. Ancak, her ikisini de kurmak, bir diğerinin üzerinde seçen taklitlere yol açacaktır. –
Hangi çağrının önemli olmadığı konusunda daha fazla kanıt için, tip sisteminin sanal üyeler ve geçersiz kılmaları için benzer şekilde çalıştığını düşünün. Örneğin, AbstractBase'e EntityObject öğesinin INPC olayı için bir geçersiz kılma eklediyseniz, EntityObject'in sürümünü çağırmak için herhangi bir kod kullanan herhangi bir kodun soyut yolu yoktur. EntityObject'e atsanız bile, AbstractBase üyesi çağrılır. Bir baz üye geçersiz kılındığında, sadece türeyen sınıf orjinal taban elemanına erişebilir. –