У меня проблемы с [ObjectValidator]. Итак, у меня есть:Тестирование объекта ObjectValidator
public class UserBO
{
public int ID
{
get;
set;
}
[NotNullValidator(MessageTemplate = "Can't be null!")]
[RegexValidator(@"[a-z]|[A-Z]|[0-9]*", MessageTemplate = "Must be valid!", Ruleset = "validate_username")]
[StringLengthValidator(5, RangeBoundaryType.Inclusive, 25, RangeBoundaryType.Inclusive, Ruleset = "validate_username")]
public string username
{
get;
set;
}
и другой класс:
public class PersonBO
{
public int ID
{
get;
set;
}
[NotNullValidator(MessageTemplate="Can't be null!")]
[ObjectValidator(MessageTemplate = "Must be valid!", Ruleset="validate_obj_user")]
public UserBO User
{
get;
set;
}
...
Теперь вы можете сказать мне, почему следующий тест проходит?
[TestMethod()]
public void PersonBOConstructorTest()
{
PersonBO target = new PersonBO()
{
User = new UserBO
{
ID = 4,
username = "asd"
}
};
ValidationResults vr = Validation.Validate<PersonBO>(target, "validate_obj_user");
Assert.IsTrue(vr.IsValid);
}
Это не должно быть действительным, так как: атрибут пользователя (типа UserBO) содержит имя пользователя «ASD» (3 символа), и я определен для него StringLengthValidator (от 5 до 25 символов) .. так почему тест проходит? этот объект недействителен Не могу понять.
Спасибо.
Хотя это действительно не актуально для вашего фактического вопроса, как валидаторы регулярных выражений, так и строки будут захлебываться нулем. Это означает, что ненулевой валидатор является избыточным. –
И снова, в то время как это не связано с вашим вопросом, регулярное выражение «[a-z] | [A-Z] | [0-9] *», вероятно, не делает то, что вы думаете, что оно делает. Буквально каждая строка будет проходить проверку. Я подозреваю, что «^ [a-zA-Z0-9] {5,25} $«, вероятно, ближе к тому, что вы хотите. Предполагая, что вы хотите, чтобы имена пользователей имели только буквы и цифры. Это также имеет преимущество, заключающееся в проверке длины строки, и вы попадаете только на один валидатор. –