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