public void EvaluateProperties() { var model = new PropertiesModel(); var type = model.GetType(); var xProperty = type.GetProperty("X"); var yProperty = type.GetProperty("Y"); var zProperty = type.GetProperty("Z"); var wProperty = type.GetProperty("W"); Assert.IsNotNull(xProperty); Assert.IsTrue(xProperty.CanRead); Assert.IsFalse(xProperty.CanWrite); Assert.IsNotNull(yProperty); Assert.IsTrue(yProperty.CanRead); Assert.IsTrue(yProperty.CanWrite); Assert.IsNotNull(zProperty); Assert.IsFalse(zProperty.CanRead); Assert.IsTrue(zProperty.CanWrite); Assert.IsNotNull(wProperty); Assert.IsTrue(wProperty.CanRead); Assert.IsTrue(wProperty.CanWrite); Assert.AreEqual(xProperty.GetValue(model), model.X); var xGetMethod = xProperty.GetGetMethod(); Assert.IsNotNull(xGetMethod); Assert.AreEqual((int)xGetMethod.Invoke(model, null), model.X); zProperty.SetValue(model, 20); Assert.AreEqual(model.GetZ(), 20); var zSetMethod = zProperty.GetSetMethod(); Assert.IsNotNull(zSetMethod); zSetMethod.Invoke(model, new object[] { 12 }); Assert.AreEqual(model.GetZ(), 12); wProperty.SetValue(model, 99); Assert.AreEqual(model.W, 99); var indexerProperty = type.GetProperty("Item"); Assert.IsNotNull(indexerProperty); Assert.IsTrue(indexerProperty.GetIndexParameters().Any()); Assert.AreEqual(model[64], indexerProperty.GetValue(model, new object[] { 64 })); }