public void Should_be_able_to_cast() { var observer1 = new Mock <IObserver <Data> >(); var observer2 = new Mock <IObserver <ExtendedData> >(); UnitUnderTest.Cast <Data, Data>().Subscribe(observer1.Object); UnitUnderTest.Cast <Data, ExtendedData>().Subscribe(observer2.Object); UnitUnderTest.Emit(new ExtendedData { Value = 1, OtherValue = 2 }); observer1.Verify(f => f.OnNext(It.IsAny <Data>()), Times.Exactly(1)); observer1.Verify(f => f.OnNext(It.Is <Data>(d => d.Value == 1)), Times.Once); observer2.Verify(f => f.OnNext(It.IsAny <ExtendedData>()), Times.Exactly(1)); observer2.Verify(f => f.OnNext(It.Is <ExtendedData>(d => d.Value == 1 && d.OtherValue == 2)), Times.Once); }