2008-12-16 89 views
11

如何單元測試C#中的Web服務與Visual Studio 2008?當我生成一個單元測試時,它會添加一個對Web服務類的實際引用,而不是Web引用。它設置在指定的屬性:如何使用Visual Studio 2008對C#Web服務進行單元測試

http://msdn.microsoft.com/en-us/library/ms243399(VS.80).aspx#TestingWebServiceLocally

然而,這將完成不執行測試。我試圖將該呼叫添加到WebServiceHelper.TryUrlRedirection(...),但該呼叫不喜歡該目標,因爲它從WebService繼承,而不是WebClientProtocol

+1

您使用哪種項目類型進行Web服務?這是一個WCF asmx?它是網站還是網絡應用程序 – JoshBerke 2008-12-16 17:42:58

+0

它不是WCF。這只是一個正常的asmx web服務。 – 2008-12-16 18:07:15

回答

24

我通常所做的不是直接針對Web服務進行測試,而是嘗試儘可能少地將代碼放在服務中,並調用一個完成所有實際工作的不同類。然後我爲其他班級編寫單元測試。事實證明,類有時可以在Web服務環境之外有用,所以這樣 - 你獲得了兩次。

1

您可以將服務引用添加到您的單元測試項目或生成客戶端存根,並將該類放入單元測試項目中。

+0

是的,我做到了。我只是很好奇你應該怎麼做「微軟的方式」。也就是MSDN文檔指定的方式以及單元測試如何自動生成。 – 2008-12-16 17:32:50

8

如果您正在編寫Web服務,請嘗試將所有邏輯放入另一個(可測試)圖層。每個Web方法應該儘可能少些代碼。那麼你將沒有理由直接測試Web方法,因爲你可以測試底層。

[WebMethod] 
public void DoSomething() 
{ 
    hander.DoSomething(); 
} 

如果你是消費的Web方法,包裝在一個類包裝產生的主叫方,並實現了類包裝的接口。然後,無論何時您需要調用Web服務,都可以使用該界面調用該方法。您希望使用該接口以便在測試期間(使用Rhino Mocks,Moq或TypeMock)使類包裝程序可交換。

0

我的網絡方法的單元測試,我有以下幾點:

// TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example, 
// http://.../Default.aspx). This is necessary for the unit test to be executed on the web server, 
// whether you are testing a page, web service, or a WCF service. 
[HostType("ASP.NET")] 
[UrlToTest("http://localhost/MyWebService")] 

除了通常的:

[TestMethod()] 
[DeploymentItem("MyWebService.dll")] 

此代碼是約從使用Visual Studio 2008單元測試嚮導。

0

要知道,有兩種類型的Web服務。那些你自己寫的,想要測試的,以及你所消費的。對於前者,上述規則適用。但是,我會說有時我會看到開發人員針對外部Web服務進行測試。邏輯規定第三方服務不可靠,因此需要更多的測試。在面向對象編程中,最好理解Martin Fowler和其他人都告訴我們的關注點。這意味着我們不應該測試系統外部的系統。

但是,我喜歡編寫包裝類來提供對服務有用的功能。例如,Bing地圖有許多非常強大的功能。我寫這些測試只是爲了確保他們給我預期的價值。雖然範圍並不廣泛,但重點在於,如果Web服務由於某種原因而死亡(身份驗證密鑰過期等),則可以通過測試服務器向我通知它。

相關問題