Я пишу модульный тест и получаю исключение при попытке вызвать событие из макета абстрактного класса. Вот пример кода:
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);
}
Очевидно, я мог бы использовать имитацию для INotifyPropertyChanged
, и событие возникает нормально, но внутри PropertyChangedMapper
мне нужно привести отправителя к AbstractBase
, который не работает при использовании Mock
EDIT :
Согласно предложению, использование Mock.As <> ()
кажется правильным чтобы пойти, единственная проблема выше заключается в том, что событие, возникшее из notificationMock
, не имеет ничего общего с исходным имитацией объекта. Код:
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"));