WCFサービスから予想される障害を単体テストするための最良の方法は何ですか?
特定の再現可能なエラーに対して(正しく)FaultExceptionsをスローしているWCFサービスの単体テストを試みています。単体テストは、WCFクライアントのインスタンスを取得し、FaultExceptionをスローする適切なサービスメソッドを呼び出します。
これらはすべて期待どおりに機能しますが、サービスの実装でエラーが検出されない場合、障害が原因でIDEが破損するため、これを単体テストするのが困難です。私は例外ではなく障害を使用しているため、IDEが例外をシリアル化してクライアントに送信し、そこで例外が発生することを期待していました。
特定のユーザー未処理の例外のブレークを無効にする構成オプションがあることはわかりますが、チーム環境では簡単に実行できないため、同じ結果を達成するためのより良い方法を誰かが指摘してくれることを期待していました。
これは、実装が現在どのように見えるかのサンプルコードです...
単体テストプロジェクトには、WCFサービスへのサービス参照があり、インターフェイスを次のように定義しました。
[OperationContract(Name = "DoSomething")]
[FaultContract(typeof(EpicFail))]
ResponseObject DoSomething(RequestObject requestObject);
障害は次のように定義されます。
[DataContract]
public class EpicFail
{
public EpicFail(string action)
{
this.Reason = "Epic Fail";
this.Action = action;
}
[DataMember]
public string Reason
{
get;
set;
}
[DataMember]
public string Action
{
get;
set;
}
}
サービスを呼び出すコードは、漠然と次のようになります。
[TestMethod()]
[ExpectedException(typeof(FaultException<EpicFail>))]
public void FaultTest_Fails_Epicly()
{
bool testPassed = false;
try
{
ResponseObject resp = GetServiceClient().DoSomething(req);
}
catch (FaultException<EpicFail>)
{
testPassed = true;
}
Assert.IsTrue(testPassed);
}
- コードを編集して、ExpectedException属性を使用していることを示しましたが、サービスで例外がスローされたときにIDE/デバッガーが壊れないようにする効果はあまりないようです。