2012-04-02 11 views
2

必要に応じて、IServiceBehavior,IEndpointBehaviorIDispatchMessageInspectorの実装を記述しており、すべてのWCFサービスで使用されています。カスタムビヘイビアやインスペクタなどのカスタムWCF拡張機能のユニットテスト

ユニットテストが必要ですか?はいの場合、これらのカスタムWCF拡張ポイントを単体テストするにはどうすればよいですか?私はMSTestを使用しています。

答えて

-1

あなたがテストの二組持っている必要があります。これらのインタフェースのカスタム実装あなたのサービスのための

  • 統合テストのための

    1. ユニットテスト(それはまた、インターフェースをカバーするが、しかしフル、実使用におけるセットアップシナリオ)

    ユニットテストの実装は、ユニットテストと同じように行う必要があります。これは、これらのカスタム実装が何をするかを検証することに実際に絞り込んでいます。普通の古いユニットテスト。しかしながら

    、正常ユニットテストようなWCFが実装ビットには、2つの大きな障害があることに注意してください。(単に単独コンテキストを置く)

    • WCFコンテキストヘッダとして、モックの点で作業することは困難であろうがそれらはすべて、それらが(例えばInstanceContextために)シールされるようにメソッドのパラメータのいくつかは不可能かもしれないモック静的クラス(OperationContext.Current
    • から来るか、かなり複雑当然

    これは、適切な技術やツールの使い方を克服することができます:モックは動作しません密封されたクラスの場合

    • 、あなたは、単に(AutoFixtureのようなツールの助けを借りて)インスタンスと設定オブジェクト/依存関係を手動で作成グラフ(時間がかかるかもしれませんが、ほとんどの場合、すべてを使用するわけではありません)。
    • モック/スタブができるものは何でも構いません。FakeItEasy封印されていない限り(インターフェイスである必要はありません)、クラスをスタブすることができます。未使用のメソッドパラメータを処理することは素晴らしいことです。
    • OperationContext.Current(など)と対処するには、デザインを少し変更する必要があります。正確には、いくつかの点で現在のコンテキストを使用して、すべてのクラスがprotected virtualそれを暴露する方法を実装する必要があります(または役に立つかもしれない他の部分を、リクエストヘッダは言う):

      protected virtual MessageHeaders GetContextHeaders() 
      { 
          return OperationContext.Current.RequestContext.RequestMessage.Headers; 
      } 
      

      その後、派生を作成する必要があります、 testableこれらのヘッダー(またはコンテキストまたは使用する予定のもの)のmocked/stubbedバージョンを返し、単体テストでそのクラスのインスタンスを作成するクラスです。

    ユニットテストが完了したら、integrationを簡単に見てください。実際のシナリオで使用されるようにオブジェクトを設定し、期待通りに動作することを確認してください。


    サイドノート:ユニットテストはまた、しかし、簡単な方法で行うことができますよどちらかが必要に支払わツールおよび/またはビット重い(の静的/密封されたクラスをモックを聞かせてTypemock Isolatorを、など)/複雑なもの(PEX/Moles)。

  • 関連する問題