public void When_Property_Declared_On_Base_Class_Then_OnNext_Changes()
        {
            // Arrange
            var obj = new DerivedTestObservableObject {Age = 100};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<int>();
            var expected = new[]
            {
                OnNext(000, 100),
                OnNext(000, 20),
            };

            var sut = obj.WhenValue(x => x.Age);

            // Act
            sut.Subscribe(observer);
            obj.Age = 20;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }
        public void When_Property_Declared_On_Base_Class_Then_OnNext_Changes()
        {
            // Arrange
            var obj = new DerivedTestObservableObject {Age = 100};
            var scheduler = new TestScheduler();
            var observer = scheduler.CreateObserver<IPropertyValueChanged<int>>();
            var expected = new[]
            {
                // Since reflection is used, the PropertyValueChange is typed to the property declaring class not the derived one.
                // This impacts the test assert as they are IEquatable=false if the TClass types disagree. So make it TestPoco not
                // DerivedTestPoco.
                OnNext(000, PropertyValueChanged.CreateWithValue((TestObservableObject) obj, "Age", 100)),
                OnNext(000, PropertyValueChanged.CreateWithValue((TestObservableObject) obj, "Age", 20)),
            };

            var sut = obj.When(x => x.Age);

            // Act
            sut.Subscribe(observer);
            obj.Age = 20;

            // Assert
            Assert.AreEqual(expected, observer.Messages);
        }