public void ObservableInstanceMethodShouldInvokeMethodWhenInstanceChangesAndRaiseChangedEvent()
        {
            var methodInfo = typeof(ExampleClass).GetMethod(
                "PublicInstanceMethodNoParamsReturnInt32",
                BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
            var instance = new ExampleClass(10);
            var changes  = new List <int>();
            var observableInstanceMethod = new ObservableInstanceMethod <ExampleClass, Int32>(instance, methodInfo);

            observableInstanceMethod.Result.Changed.Subscribe((v) => changes.Add(v));
            changes.Count.Should().Be(1);
            changes[0].Should().Be(10);

            observableInstanceMethod.Result.GetValue().Should().Be(10);
            instance.GetCallCount(methodInfo.Name).Should().Be(1);

            var instance2 = new ExampleClass(20);

            observableInstanceMethod.Instance.SetValue(instance2);
            changes.Count.Should().Be(2);
            changes[0].Should().Be(10);
            changes[1].Should().Be(20);

            observableInstanceMethod.Result.GetValue().Should().Be(20);
            instance.GetCallCount(methodInfo.Name).Should().Be(1);
            instance2.GetCallCount(methodInfo.Name).Should().Be(1);
        }
        public void ObservableInstanceMethodConstructorShouldInvokeMethodOnInstance()
        {
            var methodInfo = typeof(ExampleClass).GetMethod(
                "PublicInstanceMethodNoParamsReturnInt32",
                BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static);
            var instance = new ExampleClass(10);
            var observableInstanceMethod = new ObservableInstanceMethod <ExampleClass, Int32>(instance, methodInfo);

            observableInstanceMethod.Result.GetValue().Should().Be(10);
            instance.GetCallCount(methodInfo.Name).Should().Be(1);
        }