C # и Moq, вызывают событие, объявленное в интерфейсе из макета абстрактного класса

Я пишу модульный тест и получаю исключение при попытке вызвать событие из макета абстрактного класса. Вот пример кода:

    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"));
7
задан Paul 19 September 2011 в 18:30
поделиться