2012-04-15 9 views
5

私はSystem.ComponentModel.DataAnnotations.CustomValidationAttributeを使用して自分のPOCOクラスの1つを検証しています。ユニットテストをしようとすると、検証メソッドも呼び出されません。CustomValidationAttribute指定されたメソッドが呼び出されていない

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

が、私はそれを検証しよう:

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! 

それでも決して手順カスタム検証メソッドに。何がありますか?

答えて

7

すべてのプロパティを検証するかどうかを指定するboolを使用するオーバーロードを試してください。最後のパラメータにtrueを渡します。

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

falseを渡すかvalidateAllPropertiesを省略すると、RequiredAttributeのみがチェックされます。 こちらはMSDN documentationです。

+0

これはまさにそれでした。ありがとうございました。 –

関連する問題