//...omitted for brevity
// Append characters
stringBuilder.Append("asdf");
model.DisplayName = stringBuilder.ToString() ;
results.Clear();
actual = Validator.TryValidateObject(model, context, results, validateAllProperties: true);
Assert.IsFalse(actual, "Expects validation to fail");
Обратите внимание на флаг validateAllProperties
, установленный на true
. Это указывает валидатору проверять все свойства, так как имя подразумевает
true для проверки всех свойств; если ложь, проверяются только обязательные атрибуты ..
акцент шахты
Применительно к первомучасть теста завершится неудачей, поскольку цикл for
переходит от 0 до 25, а в строителе строк уже есть символ.
Он проходит, как и ожидалось
public void Max25CharsTest() {
// Arrange
var stringBuilder = new StringBuilder("a");
for (var i = 0; i < 24; i++) { //<-- changed this to 24
stringBuilder.Append("a");
}
var model = new ContactRequest { DisplayName = stringBuilder.ToString() };
var context = new ValidationContext(model);
var results = new List<ValidationResult>();
// Act
var actual = Validator.TryValidateObject(model, context, results, validateAllProperties: true);
// Assert
Assert.IsTrue(actual, "Expects validation to pass");
// Append characters
stringBuilder.Append("asdf");
model.DisplayName = stringBuilder.ToString();
results.Clear();
actual = Validator.TryValidateObject(model, context, results, validateAllProperties: true);
Assert.IsFalse(actual, "Expects validation to fail");
}
Ссылка TryValidateObject(Object, ValidationContext, ICollection<ValidationResult>, Boolean)
Этот метод оценивает каждый экземпляр ValidationAttribute, который присоединен к типу объекта. Он также проверяет, предоставляется ли каждое свойство, помеченное с помощью RequiredAttribute. Он проверяет значения свойств объекта, если validateAllProperties имеет значение true, но не рекурсивно проверяет свойства объектов, возвращаемых свойствами.