public void GetField()
        {
            var objMember = new ObjectMember();
            var testObj   = new TestObj();

            Assert.Equal(2, objMember.GetValue(testObj, "IntFld"));
            Assert.Equal(2, objMember.GetValue(testObj, "IntFld"));               // lets check cached accessor

            Assert.Equal("BBB", objMember.GetValue(testObj, "StrFld"));
            Assert.Equal("BBB", objMember.GetValue(testObj, "StrFld"));               // lets check cached accessor

            Assert.Equal(DBNull.Value, objMember.GetValue(testObj, "ObjFld"));
        }
        public void GetProperty()
        {
            var objMember = new ObjectMember();
            var testObj   = new TestObj();

            Assert.Equal(1, objMember.GetValue(testObj, "IntProp"));
            Assert.Equal(1, objMember.GetValue(testObj, "IntProp"));               // lets check cached accessor

            Assert.Equal("AAA", objMember.GetValue(testObj, "StrProp"));
            Assert.Equal("AAA", objMember.GetValue(testObj, "StrProp"));               // lets check cached accessor

            Assert.Throws <InvalidOperationException>(() => { objMember.GetValue(testObj, "ZZZ"); });
        }
        public void GetIndexer()
        {
            var objMember = new ObjectMember();
            var testObj   = new TestObj();

            Assert.Throws <InvalidOperationException>(() => { objMember.GetValue(testObj, "1"); });

            var testObjWithObjIdx = new TestObjWithObjIndexer();

            Assert.Equal("ColName", objMember.GetValue(testObjWithObjIdx, "ColName"));

            var testObjWithStrIdx = new TestObjWithStrIndexer();

            Assert.Equal(7, objMember.GetValue(testObjWithStrIdx, "ColName"));
        }