2008-08-29 118 views
5

我有一個將消息發送到外部Web服務的應用程序。我使用MSBuildCruisecontrol.NET構建和部署此應用程序。隨着CCNET構建和部署應用程序,它還使用NUnit運行一組測試。我現在也想測試Web服務通信。Web服務通信的自動化測試

我的想法是,作爲構建過程的一部分,應該生成一個Web服務(基於外部Web服務WSDL)並部署到構建服務器本地Web服務器。所有Web服務應該做的就是接收郵件並將其放在文件系統上,以便我可以使用普通的NUnit來檢查它。這也將使開發更容易,因爲新開發人員只需運行構建腳本並啓動並運行(不必花時間與第三方服務建立連接)。

是否有任何現有的實用程序輕鬆地嘲諷基於WSDL的Web服務?任何人使用MSBuild做了類似的事情?

是否有測試此場景的其他方式?

回答

3

我剛開始研究http://www.soapui.org/,它似乎可以很好地測試Web服務。另外,也許看看在你的web服務中增加一個抽象層,每個服務調用會直接調用一個可測試的方法(在web範圍之外)?我只是在做一個更大的項目,而且它的可測試性很好。

+0

我已經使用soapui進行功能和性能測試我們的web服務,它工作的很棒:) – 2008-10-07 11:26:09

1

一般來說,測試像這樣的東西的一個很好的方法是使用mock objects

在工作中,我們使用產品TypeMock來測試Web Service通信和其他外部依賴項。它花錢,所以出於這個原因,它可能不適合你的需求,但我認爲這是一個夢幻般的產品。我可以從個人經驗告訴你,它與NUnit和CCNet很好地結合在一起。

它有一個非常簡單的語法,你基本上說「當這個方法/屬性被調用時,我想讓你返回這個值。」測試網絡故障,文件不存在,當然還有網絡服務是很好的。

1

看看NMock2。它是一款開源的嘲笑產品,允許您創建支持豐富和深入交互的界面的「虛擬」實現。

例如,如果你的WS接口被稱爲IService並具有Data GetData()方法,你可以創建一個要求方法被調用一次,並返回一個新Data對象模擬:

var testService = mockery.NewMock<IService>(); 
Expect 
    .Once 
    .On(testService) 
    .Method("GetService") 
    .WithNoArguments() 
    .Will(
     Return.Value(new Data()); 

在結束請致電mockery.VerifyAllExpectationsHaveBeenMet()以確保實際調用GetData方法。

P.S .:不要將「NMock2」項目與「NMock RC2」混淆,後者在sourceforge上也被稱爲「nmock2」。 NMock2這個項目似乎已經取代了NMock。

0

在我的工作地點,我們正在使用TypemocknUnit進行單元測試。