必要に応じて、IServiceBehavior
,IEndpointBehavior
、IDispatchMessageInspector
の実装を記述しており、すべてのWCFサービスで使用されています。カスタムビヘイビアやインスペクタなどのカスタムWCF拡張機能のユニットテスト
ユニットテストが必要ですか?はいの場合、これらのカスタムWCF拡張ポイントを単体テストするにはどうすればよいですか?私はMSTestを使用しています。
必要に応じて、IServiceBehavior
,IEndpointBehavior
、IDispatchMessageInspector
の実装を記述しており、すべてのWCFサービスで使用されています。カスタムビヘイビアやインスペクタなどのカスタムWCF拡張機能のユニットテスト
ユニットテストが必要ですか?はいの場合、これらのカスタムWCF拡張ポイントを単体テストするにはどうすればよいですか?私はMSTestを使用しています。
あなたがテストの二組持っている必要があります。これらのインタフェースのカスタム実装あなたのサービスのための
ユニットテストの実装は、ユニットテストと同じように行う必要があります。これは、これらのカスタム実装が何をするかを検証することに実際に絞り込んでいます。普通の古いユニットテスト。しかしながら
、正常ユニットテストようなWCFが実装ビットには、2つの大きな障害があることに注意してください。(単に単独コンテキストを置く)
これは、適切な技術やツールの使い方を克服することができます:モックは動作しません密封されたクラスの場合
OperationContext.Current
(など)と対処するには、デザインを少し変更する必要があります。正確には、いくつかの点で現在のコンテキストを使用して、すべてのクラスがprotected virtual
それを暴露する方法を実装する必要があります(または役に立つかもしれない他の部分を、リクエストヘッダは言う):
protected virtual MessageHeaders GetContextHeaders()
{
return OperationContext.Current.RequestContext.RequestMessage.Headers;
}
その後、派生を作成する必要があります、 testableこれらのヘッダー(またはコンテキストまたは使用する予定のもの)のmocked/stubbedバージョンを返し、単体テストでそのクラスのインスタンスを作成するクラスです。
ユニットテストが完了したら、integrationを簡単に見てください。実際のシナリオで使用されるようにオブジェクトを設定し、期待通りに動作することを確認してください。
サイドノート:ユニットテストはまた、しかし、簡単な方法で行うことができますよどちらかが必要に支払わツールおよび/またはビット重い(の静的/密封されたクラスをモックを聞かせてTypemock Isolatorを、など)/複雑なもの(PEX/Moles)。