public void Can_Get_Field()
        {
            var testObject = new TestObject();
            var fieldInfo = typeof(TestObject).GetField("SomeField");
            var getter = fieldInfo.DelegateForGet();

            Assert.AreEqual(5, getter(testObject));
        }
        public void Can_Get_Property()
        {
            var testObject = new TestObject();
            var propertyInfo = typeof(TestObject).GetProperty("SomeProperty");
            var getter = propertyInfo.DelegateForGet();

            Assert.AreEqual(0, getter(testObject));
        }
        public void Can_Set_Property()
        {
            var testObject = new TestObject();
            var testObjectAsObj = (object)testObject;
            var propertyInfo = typeof(TestObject).GetProperty("SomeProperty");
            var setter = propertyInfo.DelegateForSet();
            const int valueToSet = 123;

            Assert.DoesNotThrow(() => setter(ref testObjectAsObj, valueToSet));
            Assert.AreEqual(valueToSet, testObject.SomeProperty);
        }
        public void Can_Set_Field()
        {
            var testObject = new TestObject();
            var testObjectAsObj = (object)testObject;
            var fieldInfo = typeof(TestObject).GetField("SomeField");
            var setter = fieldInfo.DelegateForSet();
            const int valueToSet = 123;

            Assert.DoesNotThrow(() => setter(ref testObjectAsObj, valueToSet));
            Assert.AreEqual(valueToSet, testObject.SomeField);
        }
        public void Can_Get_Const_Backing_Field()
        {
            var testObject = new TestObject();
            var propertyInfo = typeof(TestObject).GetProperty("SomeConstProperty");
            var getter = propertyInfo.DelegateForGet();

            Assert.AreEqual("This is a const field", getter(testObject));
        }
        public void Can_Get_Readonly_Backing_Field()
        {
            var testObject = new TestObject();
            var propertyInfo = typeof(TestObject).GetProperty("SomeReadonlyProperty");
            var getter = propertyInfo.DelegateForGet();

            Assert.AreEqual(55, getter(testObject));
        }