1
我遇到了[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个字符),以及i为它StringLengthValidator(5首25个字符之间)中所定义..所以为什么测试通过?该对象无效 我无法理解。
谢谢。
虽然它与真正的问题没有密切关系,但正则表达式和字符串长度验证器都会在空值上窒息。这意味着非空验证器是多余的。 –
再说一次,虽然它与你的问题没有密切关系,但是正则表达式“[a-z] | [A-Z] | [0-9] *”可能并不是在做你认为它正在做的事情。从字面上看,每一个可能的字符串都会通过检查。我怀疑“^ [a-zA-Z0-9] {5,25} $”可能更接近你想要的。假设你想要的是确保用户名只有字母和数字。这也有覆盖字符串长度检查的优点,让你只有一个验证器。 –