2011-12-29 35 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()方法不能接受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(); 
    } 
} 
相關問題