2010-02-11 149 views
9

我剛剛完成創建將由非.NET內部自定義系統使用的Web服務。我希望在.NET 3.5環境中特別針對通過.asmx設置測試類和方法(最佳實踐,如何測試調用,不該做什麼等)的最佳方式提供建議。單元測試建議 - 如何單元測試您的.asmx

我將使用NUnit來做這個測試。是否像創建一個測試項目,向其添加服務,然後創建一個測試類和該服務的實例一樣簡單?然後開始創建您的測試方法?

我需要測試兩者的.asmx和.asmx.cs方法(單元測試方法),所以我知道如果我通過這它去上班了隊友。

也許這是不可能直接測試的.asmx.cs和我就必須通過集成測試來測試。我想我真正需要的是嘲笑我的.asmx。可能不可能。

回答

8

單元測試的最佳實踐不是測試asmx文件,而是測試asmx文件後部分(單位)的背後。如果你可以將你的代碼分成小塊和單獨的塊,那麼你可以對這些塊進行單元測試。

如果你想測試asmx文件本身,你正在談論一個集成測試。您可以按照您所描述的方式使用NUnit,但這不是真正的單元測試。

+0

我想UNIT測試中的方法。 asmx.cs.所以我的問題還沒有解決,因爲在我的單元測試項目中,我想我不確定如何調用.asmx.cs。換句話說,如果我的服務被稱爲MyService.asmx,我想創建一個單元測試MyServiceTest,專門測試.asmx.cs方法。我需要同時測試,就好像我是服務器和單元測試的使用者一樣,知道是否在任何.asmx.cs方法中出現任何錯誤。基本上問題是我創建了一個內部服務,我的老闆正在利用它。剛剛完成了這些方法。 – PositiveGuy 2010-02-12 01:04:16

+0

所以我想我的問題依然存在。我創建了MyTestProject解決方案,並在其中創建了一個C#項目,該項目將包含我的測試類。然後將Web項目添加到同一個解決方案中,並且想要測試對.asmx的調用,並且單元測試.asmx.cs中的方法 – PositiveGuy 2010-02-12 01:07:28

+0

您可以將方法從asmx.cs移出(至少是需要的部分測試)到一個新的班級和測試? – Davy8 2010-02-12 01:24:41

0

就像Lodewijk所說的,最好不要單元測試asmx文件。相反,將該文件中的邏輯提取到處理您所處行爲的類文件中。這樣你就可以單獨測試這些類與UI的隔離。你可能會發現你真正的問題是你的UI層有太多的業務邏輯。

如果你想測試ASMX文件本身你要麼要考慮手動測試,集成測試或驗收測試......但如果你能你的邏輯轉移到業務層,你可能會發現它更更容易測試。

+0

我已經有了一個BL項目。不管怎樣,謝謝。這些是BL呼叫的包裝。 – PositiveGuy 2010-02-12 01:33:26

1

很不幸,這是的.asmx web服務的問題,它們都依賴於ASP.net,你最好的辦法是保持的.asmx Web服務作爲存根,並提取您的Web服務邏輯到一個乾淨的依賴而是免費的類和單元測試。另一種選擇是運行集成測試。

從長遠來看,如果單元測試是對你很重要,你可能會更好用web service framework,其設計從一開始就進行單元測試開發。

3

您可能會錯過其他人所說的話。 .asmx文件應該有沒有值得測試的邏輯。如果它真的只是業務層調用的包裝,那麼它不會添加任何內容,也不需要進行測試。如果它添加了一些內容,請提取該內容,直到.asmx不包含任何內容,而是包含傳遞調用。

什麼是您的.asmx文件包含不能被提取到單獨的,可測試的類?

+0

它是包含額外邏輯的包裝,如日誌記錄等。它是傳遞給我的PayPal包裝器項目並在那裏調用包裝器......但包裝器並不總是隻通過沒有做一些日誌記錄,更新我們側面的某些記錄等。 – PositiveGuy 2010-02-12 02:14:04

+0

我想我可以提取到單獨的課程。我只需將這些方法複製到某個Test類中,然後將該類添加到我的測試項目中。 – PositiveGuy 2010-02-12 02:14:53