2016-04-03 8 views
1

オブジェクトの作成時にプラグインが初期化されていませんが、ServiceStackプロジェクトで私のValidationFeatureルールセットをユニットテストしたいと思います。ServiceStackでValidationFeatureプラグインをユニット化することは可能ですか

appHostを初期化する私の元のコードはここにあります。

[TestFixtureSetUp] 
    private void TestFixtureSetUp() 
    { 
     appHost = new BasicAppHost().Init(); 
     appHost.Plugins.Add(new ValidationFeature()); 
     var container = appHost.Container; 
     container.RegisterValidators(typeof(ApplicationValidator).Assembly); 
     container.RegisterAutoWiredAs<FakeRetailReferralRepository, IRetailReferralRepository>(); 
     container.RegisterAutoWired<SubmitApplicationService>();    
    } 

私はBasicAppHostコンストラクタ間とInit()Plugins.Addラインを移動しようとした、それはどちらか動作しませんでした。私がしようとしていることは可能ですか?

+1

が重複する可能性を[ServiceStackのプラグインのテスト](http://stackoverflow.com/questions/11710434/testing-plugins-in-servicestack) –

答えて

2

検証機能はリクエストパイプライン内で検証されるため、一般的にはテストするために、つまり自己ホストとサービスクライアントを使用する完全な統合テストが必要です。

あなたはまだユニットは、バリデータをテストすることができますが、検証が発生するとサービスが呼び出される前に、あなたは、例えばサービス、呼び出すのではなく直接リクエストDTOとバリデータをテストする必要があります:の

using (var appHost = new BasicAppHost 
{ 
    ConfigureAppHost = host => { 
     host.Plugins.Add(new ValidationFeature()); 
    }, 
    ConfigureContainer = c => { 
     c.RegisterValidators(typeof(ApplicationValidator).Assembly); 
    } 
}.Init()) 
{ 
    var myValidator = appHost.TryResolve<IValidator<MyRequest>>(); 

    var result = myValidator.Validate(new MyRequest { ... }); 
    Assert.That(result.IsValid, Is.False); 
    Assert.That(result.Errors.Count, Is.EqualTo(1)); 
} 
関連する問題