2017-06-16 10 views
1

以下に説明するポストビヘイビアのためにバリデータをテストしたいと思います。ServiceStackで "ApplyTo.Post"ルールセットをテストする方法

public interface ITestValidator 
{ 
    bool IsExists(string testName); 
} 

public class TestValidator : ITestValidator 
{ 

    public bool IsExists(string testName) 
    { 
     return true; 
    } 
} 

public class TestRequest 
{ 
    public string Name { get; set; } 
    public int? Level { get; set; } 
} 

public class TestRequestValidator : AbstractValidator<TestRequest> 
{ 
    public ITestValidator Validator { get; set; } 
    public TestRequestValidator() 
    { 
     RuleFor(p => p.Level).Must(p => p.HasValue && p > 0); 
     RuleSet(ApplyTo.Post,() => 
     { 
      RuleFor(p => p.Name).Must(p => !Validator.IsExists(p)); 
     }); 
    } 
} 

次のようにxunitでテストを作成しました。

[Fact] 
public void test_should_not_be_valid() 
{ 
    var validator = new TestRequestValidator(); 
    var validationResult = validator.Validate(new TestRequest 
    { 
     Level = 1, 
     Name = null 
    }); 

    Assert.False(validationResult.IsValid); 
} 

このテストでは、

RuleFor(p => p.Level).Must(p => p.HasValue && p > 0); 

ためsuccessedされる。しかし、それは

RuleFor(p => p.Name).Must(p => !Validator.IsExists(p)); 

がどのように私はApplyTo.Post、ApplyTo.Get」などの複数の操作のためのバリデータをテストすることができますのために働いていません、 ApplyTo.Delete "?あなたのような何かをHTTPメソッドのバリデータをテストすることができるはず

答えて

2

var validator = new TestRequestValidator { 
    Validator = new TestValidator() 
}; 

var result = validator.Validate(
    new ValidationContext(requestDto, null, new MultiRuleSetValidatorSelector("POST"))); 

Assert.False(result.IsValid); 
+0

i「はservice.Any(新TestRequest {})」でこれを使用することができますどのように? –

+0

@MustafaGülmezバリデータは、[サービスの作成前に実行される](http://docs.servicestack.net/order-of-operations)リクエストフィルタ内で実行されるため、[自己ホスト統合テストを作成する] (http://docs.servicestack.net/testing)を使用してフル・リクエスト・パイプラインを実行します。 – mythz

関連する問題