2010-02-16 7 views
1

[ObjectValidator]에 문제가 있습니다. 그래서, 난이 :ObjectValidator unit testing

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); 
    } 

이 유효하지 않을한다 : 사용자 이름 "ASD"(제 3 자)를 포함 (UserBO 유형의) 사용자 속성, 그리고 내가 그것을 (5와 25 자 사이) StringLengthValidator에 대해 정의 .. 왜 시험은 통과합니까? 해당 개체가 유효하지 않습니다. 이해할 수 없습니다.

감사합니다.

+0

실제 질문과 밀접한 관계가있는 것은 아니지만 정규식과 문자열 길이 검사기 모두 null로 질식합니다. 이는 유효하지 않은 유효성 검사기가 중복됨을 의미합니다. –

+1

그리고 다시 말하자면, 정규식은 당신이 생각하는 것을 아마하지 않을 것입니다. "[a-z] | [A-Z] | [0-9] 문자 그대로 가능한 모든 문자열이 수표를 전달합니다. 나는 "^ [a-zA-Z0-9] {5,25} $"가 당신이 원하는 것에 더 가깝다고 생각합니다. 당신이 원하는 것은 사용자 이름이 글자와 숫자 만 지키도록하는 것입니다. 또한 문자열 길이 검사를 덮어서 하나의 유효성 검사기로 안내하는 이점이 있습니다. –

답변

1

기본 세트가 아닌 다른 세트의 규칙을 적용하려면 ObjectValidator에 규칙 세트를 지정해야합니다.

[ObjectValidator("validate_username", MessageTemplate = "Must be valid!", Ruleset = "validate_obj_user")] 

위의 경우는이 특정 경우에 적용됩니다. 또는 문자열 길이 유효성 검사기에서 ruleset 매개 변수를 제거하여 기본 세트로 유지할 수 있습니다.

관련 문제