2012-04-15 4 views
5

Ich verwende das System.ComponentModel.DataAnnotations.CustomValidationAttribute, um eine meiner POCO-Klassen zu validieren, und wenn ich versuche, Unit-Tests durchzuführen, wird nicht einmal die Validierungsmethode aufgerufen.Angezeigte CustomValidationAttribute-Methode wird nicht aufgerufen

public class Foo 
{ 
    [Required] 
    public string SomethingRequired { get; set } 
    [CustomValidation(typeof(Foo), "ValidateBar")] 
    public int? Bar { get; set; } 
    public string Fark { get; set; } 

    public static ValidationResult ValidateBar(int? v, ValidationContext context) { 
    var foo = context.ObjectInstance as Foo; 
    if(!v.HasValue && String.IsNullOrWhiteSpace(foo.Fark)) { 
     return new ValidationResult("Either Bar or Fark must have something in them."); 
    } 
    return ValidationResult.Success; 
    } 
} 

aber wenn ich versuche, es zu überprüfen:

var foo = new Foo { 
    SomethingRequired = "okay" 
}; 
var validationContext = new ValidationContext(foo, null, null); 
var validationResults = new List<ValidationResult>(); 
bool isvalid = Validator.TryValidateObject(foo, validationContext, validationResults); 
Assert.IsFalse(isvalid); //FAIL!!! It's valid when it shouldn't be! 

Es ist nie auch Schritte in die benutzerdefinierte Validierungsmethode. Was gibt?

Antwort

7

Versuchen Sie, die Überladung zu verwenden, die eine bool angibt, die angibt, ob alle Eigenschaften überprüft werden sollen. Übergeben Sie den letzten Parameter als wahr.

public static bool TryValidateObject(
    Object instance, 
    ValidationContext validationContext, 
    ICollection<ValidationResult> validationResults, 
    bool validateAllProperties 
) 

Wenn Sie die validateAllProperties falsch oder weglassen passieren, nur die RequiredAttribute geprüft. Hier ist die MSDN documentation.

+0

Das war genau das. Vielen Dank. –