public void TestValidationMessage()
        {
            string messageKey     = "message 1";
            string defaultMessage = "Validation error message: {0}, {1}.";
            IEnumerable <object> messageArguments = new object[] { 5, 10 };
            IValidatable         validationSource = new Example();
            string          propertyName          = "FullName";
            ValidationLevel validationLevel       = ValidationLevel.Info;
            string          validationContext     = ValidationContext.Default;
            int             validationPriority    = 6;

            var message1 = new ValidationMessage(messageKey, defaultMessage, messageArguments, validationSource, propertyName, validationLevel, validationContext, validationPriority);
            var message2 = new ValidationMessage(messageKey, defaultMessage, messageArguments, validationSource, propertyName, validationLevel, validationContext, validationPriority);

            Assert.AreEqual("Validation error message: 5, 10.", message1.Message);
            Assert.AreEqual(propertyName, message1.PropertyName);
            Assert.AreEqual(validationContext, message1.ValidationContext);
            Assert.AreEqual(validationLevel, message1.ValidationLevel);
            Assert.AreEqual(validationPriority, message1.ValidationPriority);
            Assert.AreEqual(validationSource, message1.ValidationSource);
            Assert.AreEqual("Example.FullName (message: \"Validation error message: 5, 10.\", level: Info, context: default, priority: 6)", message1.ToString());

            Assert.AreEqual(message1.Message, message2.Message);
            Assert.AreEqual(message1.PropertyName, message2.PropertyName);
            Assert.AreEqual(message1.ValidationContext, message2.ValidationContext);
            Assert.AreEqual(message1.ValidationLevel, message2.ValidationLevel);
            Assert.AreEqual(message1.ValidationPriority, message2.ValidationPriority);
            Assert.AreEqual(message1.ValidationSource, message2.ValidationSource);

            Assert.AreEqual(true, message1 == message2);
            Assert.AreEqual(true, message1 == message1);
            Assert.AreEqual(0, message1.CompareTo(message2));
            Assert.AreEqual(true, message1.Equals(message2));
            Assert.AreEqual(true, message1.Equals(message2 as object));
            Assert.IsTrue(message1.GetHashCode() > 0);

            ValidationMessage.GetLocalizedMessage = x => "Napaka pri validaciji: {0}, {1}.";

            var message3 = new ValidationMessage(messageKey, defaultMessage, messageArguments, validationSource, propertyName, validationLevel, validationContext, 8);

            Assert.AreEqual("Napaka pri validaciji: 5, 10.", message3.Message);
            Assert.AreEqual(propertyName, message3.PropertyName);
            Assert.AreEqual(validationContext, message3.ValidationContext);
            Assert.AreEqual(validationLevel, message3.ValidationLevel);
            Assert.AreEqual(8, message3.ValidationPriority);
            Assert.AreEqual(validationSource, message3.ValidationSource);

            Assert.AreEqual(true, message1 != message3);
            Assert.AreEqual(-1, message1.CompareTo(message3));
            Assert.AreEqual(false, message1.Equals(message3));
            Assert.AreEqual(false, message1.Equals(message3 as object));
            Assert.AreEqual(false, message1.Equals(null));
            Assert.AreEqual(false, message1.Equals(null as object));
            Assert.AreEqual(false, message1 == null);
            Assert.AreEqual(false, null == message1);

            ValidationMessage.GetLocalizedMessage = x => "Napaka pri validaciji: {5}.";

            var message4 = new ValidationMessage(messageKey, "Test {0}", messageArguments, validationSource, propertyName, validationLevel, "new item", 8);

            Assert.AreEqual("Napaka pri validaciji: {5}.", message4.Message);
            Assert.IsTrue(message4.GetHashCode() != 0);

            ValidationMessage.GetLocalizedMessage = null;
        }