public void SetPropertyValue_TopLevel_WithValue()
        {
            // Arrange
            var componentUnderTest = new RecursivePoco
            {
                MyString = "x"
            };

            var expected = new RecursivePoco
            {
                MyString = "a"
            };

            // Act
            componentUnderTest.SetPropertyValue(o => o.MyString, "a");

            // Assert
            componentUnderTest.ShouldHaveSameValueAs(expected);
        }
        public void SetPropertyValue_Nested_WithValue()
        {
            // Arrange
            var componentUnderTest = new RecursivePoco
            {
                MyString = "x",
                Child    = new RecursivePoco
                {
                    Child = new RecursivePoco
                    {
                        Child = new RecursivePoco
                        {
                            MyString = "original"
                        }
                    }
                }
            };

            var expected = new RecursivePoco
            {
                MyString = "x",
                Child    = new RecursivePoco
                {
                    Child = new RecursivePoco
                    {
                        Child = new RecursivePoco
                        {
                            MyString = "changed"
                        }
                    }
                }
            };

            // Act
            componentUnderTest.SetPropertyValue(o => o.Child.Child.Child.MyString, "changed");

            // Assert
            componentUnderTest.ShouldHaveSameValueAs(expected);
        }