2011-10-28 12 views
2

WCF呼び出しから返されたこの例外をどのようにテストできますか?wcfからビジネス例外を取得する方法は?

私はこのエラークラスを持っています。

[Serializable] 
public class PermissionDenied_Error : Exception 
{ 
    public PermissionDenied_Error() : base("You are not approved.") { } 
} 

私のサービスでは、私はそれを投げています。

if (notApproved) 
{ 
    throw new FaultException<PermissionDenied_Error>(new PermissionDenied_Error() 
       , new FaultReason("Permissions Denied!")); 
} 

私のテストでは、私はそれを期待しています。

[Test] 
[ExpectedException(typeof(FaultException<PermissionDenied_Error>))] 

現在の結果は次のとおりです。WCFで

Expected: System.ServiceModel.FaultException`1[[PermissionDenied_Error 
    , Project.API, Version=1.0.4318.24332, Culture=neutral, PublicKeyToken=null]] 
but was: System.ServiceModel.FaultException : Permissions Denied! 

答えて

3

をごPermissionDenied_Errorは、データコントラクトでなければなりません。それは例外から派生すべきではありません。

また、クライアントが例外を予想することがわかっているように、オペレーションコントラクトにFaultContractAttributeを配置する必要があります。

はExpectedException属性は悪い習慣で使用Valamasによって

public interface IAccess 
{ 
     [OperationContract] 
     [FaultContract(typeof(PermissionDenied_Error))] 
     DtoResponse Access(DtoRequest request); 
} 
+0

私はこれが正解であることを今実現しています。私はコードが正しく表示されるようにあなたの答えを編集しました。 –

-1

を追加しました。これに代えて使用する:

[Test] 
[ExpectedException(typeof(FaultException<PermissionDenied_Error>))] 

ことはやってみてください:

[Test] 
public void Test1() 
{ 
    ..... 
    try{ 
     WfcServiceCall(...); 
     Assert.Fail("a FaultException<PermissionDenied_Error> was expected!"); 
    }catch(FaultException<PermissionDenied_Error>){ 
     Assert.Sucess(); 
    }catch(Exception e){ 
     Assert.Fail("Unexpected exception!") 
    } 
} 
+1

この回答は質問に対処していません。 –

関連する問題