2009-08-20 109 views
12

我們應該單元測試Web服務還是真的想單元測試Web服務爲我們調用的代碼,並讓Web服務單獨或至少直到集成測試等......?我們應該單元測試網絡服務嗎?

編輯:進一步澄清/想

我的想法是,測試Web服務是真正的集成測試沒有單元測試?我問,因爲我們現在的Web服務(正在開發)編碼的方式是沒有辦法單元測試它所調用的代碼。所以我想知道現在爲了能夠單元測試沒有Web服務的代碼而重構它是否值得。我想知道關於將這兩者分開是非常重要的一般共識,還是單元測試Web服務並將其稱爲好/明智確實可行。

如果我將它們分開,我會考慮兩種測試,但我不確定分離是否值得。我的直覺是我應該。

回答

11

單元測試Web服務調用的代碼絕對是一個好主意,因爲它確保代碼的「內部」是穩定的(並且設計良好)。但是,測試Web服務調用也是一個好主意,特別是如果連續調用其中的一些來完成特定任務。這將確保您提供的Web服務可用,以及在與其他Web服務調用一起調用時可以正常工作。 (不知道在編寫代碼之前還是之後編寫這些測試,但是在實現實際調用之前,您應該考慮編寫Web服務測試,以確保在編寫代碼之前可以使用它們。 )

5

爲什麼不能這樣做呢?您可以單元測試Web服務代碼,也可以從Web服務客戶端的角度對其進行單元測試。

+4

一樣的答案,就像 – Perpetualcoder 2009-08-20 21:01:19

2

我們都這樣做。

我們測試了各種代碼元素。

另外,我們使用單元測試框架來針對整個web服務執行測試。這很複雜,因爲我們必須創建(並加載)數據庫,啓動服務器,然後對該服務器執行請求。

+1

你濫用的術語「單元測試」的雅號1800信息。根據你的定義,一般的「自動化測試」和「單元測試」之間沒有區別。 – 2009-08-21 09:00:59

+4

我不清楚「單位」。 「單元」是單個「文件」嗎? 「類」? 「模塊」? 「包」?或「應用程序」? 「單位」的唯一真實和不變的定義是哪一個?由於我們不明白爲什麼包「單元」測試與類「單元」測試不同,我們認爲我們正在進行「單元」測試,並且我們肯定會使用單元測試框架,因爲它非常有效。如果它讓你開心,你也可以稱之爲「集成」測試。 – 2009-08-21 10:26:06

+1

缺少一個非常嚴格的標準並不意味着這種區分是無用的。 http://en.wikipedia.org/wiki/Continuum_fallacy – 2009-08-21 16:11:05

1

測試Web服務API很容易(它有一個API)並且很有價值。這不是一個單元測試,它是一個「集成」,「子系統」或「系統」測試(取決於你問的對象)。

雖然不需要延遲測試,直到一些神奇的時期被稱爲「集成測試」,但現在只需進行一些簡單的測試並儘早獲得益處。

+1

真正的神奇時期。我用它作爲對話片。我同意我們應該儘快測試。 :) – klabranche 2009-08-20 21:26:30

1

如果可以,請嘗試使用客戶將使用的一些開發工具(Delphi,C#,VB.Net,ColdFusion,手工製作的XML等)來使用Web服務。當然,理由當然。

1)不同的工具可能會消耗您的Web服務的問題。在你的客戶做這件事之前,最好先運行一下。

2)如果客戶遇到問題,您可以輕鬆證明您的Web服務按預期工作。在過去的一年左右,這至少停止了十幾次。

最糟糕的是開發人員在另一個時區爲SOAP調用手工製作XML並解析響應。每次他遇到問題時,他都會堅持認爲這是我們的最終目標,並且要求(嚴重)我們證明不是。我做了一個簡單的Delphi應用程序來使用Web服務,證明這些方法按預期工作,甚至爲每個請求和響應顯示XML。

0

重新更新您的問題。

的集成測試和單元測試都只是表面上相似,所以是的,他們應該做的和獨立的思想。

重構現有代碼以使其可測試可能有風險。這取決於您是否獲得的收益大於花費的時間和精力。就我而言,我一定會嘗試,即使你一次做了一點。

在光明的一面,Web服務有一個定義的接口,所以你真的沒有改變什麼要補充的集成測試。瘋了。如果可以,請在將Web服務推送給客戶之前嘗試執行此操作。使用Web服務很可能會導致界面發生變化,並且您不希望這會讓客戶陷入太多困境。

+0

我們正處於開發的最初階段,所以我不擔心重構風險。我提出了重構的想法,以便對它進行單元測試。至於具有定義的接口的Web服務,你不能擁有相同的庫嗎?我發現兩者都具有改變界面的相同潛在風險,而且我也沒有看到Web服務如何更好地受到保護,而不是像圖書館那樣。 – klabranche 2009-08-20 21:41:16

+0

如果你非常小心永遠不要改變你的庫代碼接口,那麼他們會大致相同。根據我的經驗,我發現許多發行版之間的代碼庫破壞,COM對象或Web服務的作者更可能單獨離開現有接口並引入新接口。 – 2009-08-20 22:09:23

1

我喜歡編寫單元測試的想法,它通過其公共接口一個調用您的Web服務。例如,給定的WCF Web服務可能會暴露HTTP,TCP和「web」綁定。這樣的單元測試證明web服務可以通過來調用綁定。

集成測試將涉及測試所有的服務綁定的,特別是客戶端方案測試,並與特定的客戶端工具。例如,顯示使用WS-Security時可以使用IBM的Rational Web Developer創建一個可以訪問該服務的Java客戶端是非常重要的。

2

在我的概念中,WS僅僅是一箇中央商務層對象的方法的一個單純的封裝,換句話說,Web方法只是一個「門」的接入方式在模型中更深。

對於前者說,我做兩個操作:

  1. 在服務器內部,我創建了一個winform應用程序誰做負載測試對業務層的方法。

  2. 在服務器之外(即Web應用程序「存在」的LAN之外的機器),我創建了一個使用WS的Tester(Winform或Web),這樣做負載測試。

這樣我可以評價我的解決方案考慮並捨棄「網絡效應」(即旅遊,到達WS上,WS創建對象,等的時間數據)的性能。

所有上述說的當然是恕我直言。至少這對我有很大的幫助!

Haj.-

相關問題