2011-10-28 69 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>))] 

目前的結果是:

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應該是一個數據的合同。它不應該來自Exception。

另外,您需要將FaultContractAttribute放在您的運營合同上,以便客戶知道預計會發生異常。

添加人Valamas

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

我現在意識到,這是正確的答案。我編輯了您的答案,以便代碼正確顯示。 –

-1

使用的ExpectedException屬性是一種不好的做法。如果不使用這個的:

[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

這個答案沒有解決這個問題。 –