public void EvaluateFieldsBad()
        {
            var model = new FieldsModel();

            var type = typeof(FieldsModel);
            var publicIntField = type.GetField("publicInt", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
            Assert.IsNotNull(publicIntField);

            try
            {
                publicIntField.SetValue(model, model);
            }
            catch (ArgumentException)
            {
            }

            try
            {
                publicIntField.SetValue(model, byte.MaxValue);
            }
            catch (ArgumentException)
            {
            }

            try
            {
                publicIntField.SetValue(model, true);
            }
            catch (ArgumentException)
            {
            }

            try
            {
                publicIntField.SetValue(model, (long)0);
            }
            catch (ArgumentException)
            {
            }

            try
            {
                publicIntField.SetValue(model, long.MaxValue);
            }
            catch (ArgumentException)
            {
            }
        }
        public void EvaluateFields()
        {
            var model = new FieldsModel();
            model.internalInt = 10;
            model.publicInt = 5;

            var type = typeof(FieldsModel);
            var publicIntField = type.GetField("publicInt", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
            var internalIntField = type.GetField("internalInt", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            var privateIntField = type.GetField("privateInt", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            var privateStaticIntField = type.GetField("privateStaticInt", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);

            Assert.IsNotNull(publicIntField);
            Assert.IsNotNull(internalIntField);
            Assert.IsNotNull(privateIntField);
            Assert.IsNotNull(privateStaticIntField);

            Assert.AreEqual(model.publicInt, publicIntField.GetValue(model));

            int internalIntValue = 3;
            int privateIntValue = 12;
            int privateStaticIntValue = 20;

            internalIntField.SetValue(model, internalIntValue);
            privateIntField.SetValue(model, privateIntValue);
            privateStaticIntField.SetValue(null, privateStaticIntValue);

            Assert.AreEqual(internalIntField.GetValue(model), internalIntValue);
            Assert.AreEqual(privateIntField.GetValue(model), privateIntValue);
            Assert.AreEqual(privateStaticIntField.GetValue(null), privateStaticIntValue);
        }