2011-01-31 78 views
3

我想弄清楚爲Spring的WebService模板類編寫單元測試的最佳方法。我想要做的就是檢查以確保我爲客戶端生成的每個請求/響應類型正確連接了這些類。我也想確保如果返回異常,異常處理正確。我應該如何測試WebServiceTemplate(SpringWS)

我想我想要做的是找出一種方法來實際發送/接收電話。

有什麼建議嗎?

+0

你想寫實際使用你的WebService模板打一個「活」 Web服務單元測試? – 2011-01-31 15:14:31

+0

我並不是要嘗試「活」Web服務器,所以像SoapUI這樣的工具不會幫助我。基本上,我的客戶有十幾種不同的請求/響應類型。對於每個響應/請求對,我都有實例化的WebServiceTemplate。我想確保我已經正確連線了這些。我也想模式驗證marshallers生成的xml。 – 2011-01-31 15:21:00

回答

3

我會變得俗氣,回答我自己的問題。

遠一點研究後,我發現,春天WS 2.0有一個新的客戶端測試框架,不正是我希望能(從http://blog.springsource.com/2011/01/11/spring-web-services-2-0-released/)做:

做客戶機的核心類側面集成測試是MockWebServiceServer的 。底層 想法是,網絡服務模板 連接到這個模擬服務器,發送 請求消息,該模擬服務器 然後對照註冊 預期。如果期望值爲 met,則模擬服務器隨後準備 響應消息,該消息被髮回 到模板。

的測試 客戶端代碼的典型場景包括:

  1. 創建MockWebServiceServer。
  2. 設置關於請求消息的期望值。
  3. 創建適當的響應消息
  4. 正常使用WebServiceTemplate,直接通過 客戶端代碼。
  5. 調用MockWebServiceServer.verify()使 確定所有期望已被滿足 。

不幸的是我的項目仍然使用spring-ws 1.5.9。我將嘗試將客戶端升級到2.0,並查看是否有任何問題。如果這樣順利,我可能會盡快嘗試切換服務器端。

0

soapUI是測試您的暴露WS的一個很好的選擇。您可以手動制定臨時測試的請求,或以各種方式自動執行預定義的測試。

5

嚴格地說,單元測試根本不應該使用WebServiceTemplate。您的代碼應該與WebServiceOperations接口通信,並且應該使用例如單元測試。模擬對象。這不會造成網絡調用,它只會測試您編寫的Java。

您所描述的內容最好稱爲集成測試,您可以測試您的佈線是否正確完成,可能包括對真實Web服務的調用。

在這種情況下,集成測試補充了單元測試。我的建議 - 寫兩個。

1

您所描述的不再是一個「單元測試」,因爲您正在測試的不僅僅是單獨使用WebServiceTemplate的類的單個單元。這個類的一個很好的單元測試可能包括一些嘲諷WebServiceTemplate類,以便您可以測試類的行爲時,WST返回不同類型的反應,異常等

用於驗證類的行爲在測試使用有線合作者(以及Spring上下文)運行時,你應該看看Spring的TestContext Framework。這使您可以使用@ContextConfiguration({"path/to/spring/xml"})等註釋測試類來讓Spring在運行測試之前實例化一個ApplicationContext,並將任何@Autowired屬性注入到測試類中。

最後說明:測試您的webservice使用類對實時web服務通常是一種不好的做法,因爲這會在測試中引入外部依賴關係 - 服務是否正常運行?它是什麼服務器?它是什麼版本?等等。您可能不想將這些測試作爲正常單元測試套件的一部分運行。