2011-12-29 8 views
0

AbstractValidator<T>を基本エンティティクラス内で使用したいと思います。基本エンティティクラスとFluentValidationバリデーターの統合

[Serializable] 
public abstract class Entity<T> where T : Entity<T> 
{ 
    public virtual Boolean Validate(AbstractValidator<T> validator) 
    { 
     return validator.Validate(this as ValidationContext<T>).IsValid; 
    } 
    // other stuff.. 
} 

しかし、私の試験の一つがValidate()方法はPARAMTERとしてnull受け入れることができなかったことを言って失敗しました。

[Test] 
public void CategoryDescriptionIsEmpty() 
{ 
    var category = new Category 
    { 
     Title = "some title", 
     Description = String.Empty 
    }; 

    Assert.False(category.Validate(this.validator) == true); 
} 

[SetUp] 
public void Setup() 
{ 
    this.validator = new CategoryValidator(); 
} 

私はVisual Web Developerを使用していますし、現時点でのエラーをデバッグするコンソールアプリケーションを作成するために、C# Developer Expressをインストールすることはできません。それ以来、私はユニットテストの中でどのようにデバッグするのか分かりません。あるいは、何らかの説明が与えられれば素晴らしいことでしょう!

ありがとうございます!

答えて

0

だから私の問題を解決するには、(少なくともこれは期待通りに動作します)次である:

public abstract class Entity<T> where T : Entity<T> 
{ 
    public Boolean IsValid(IValidator<T> validator) 
    { 
     // var context = new ValidationContext(this); 
     // var instance = context.InstanceToValidate as T; 
     // return validator.Validate(instance).IsValid; 

     return validator.Validate(this as T).IsValid; 
    } 
} 
public class Rambo : Entity<Rambo> 
{ 
    public Int32 MadnessRatio { get; set; } 
    public Boolean CanHarmEverything { get; set; } 
} 
public class RamboValidator : AbstractValidator<Rambo> 
{ 
    public RamboValidator() 
    { 
     RuleFor(r => r.MadnessRatio).GreaterThan(100); 
    } 
} 

class Program 
{ 
    public static void Main(String[] args) 
    { 
     var ramboInstance = new Rambo { 
      MadnessRatio = 90 
     };   

     Console.WriteLine("Is Rembo still mad?"); 
     Console.WriteLine(ramboInstance.IsValid(new RamboValidator())); 

     Console.ReadKey(); 
    } 
} 
関連する問題