2010-01-13 98 views
3

我正在嘗試編寫現有應用程序的驗收測試。嘲笑web服務調用...有時

雖然在調用Web服務時,我遇到了問題,該服務告訴我們一個人是否在辦公室內,是否在辦公室,幾個小時以及備份的人是誰。

在大多數測試中,實際調用Web服務是好的...是的,理想情況下它不應該,但爲許多次這種服務創建輸入和輸出是一項巨大的任務。

我想要做的是讓Mock生成一個默認結果,而不管輸入如何,但是它需要由代碼根據參數生成,因爲在調用和結果中存在臨時數據。

而且,如果我選擇,可以在測試場景下的測試方法的幾個選擇輸入上設置不同的結果。

基本上,默認情況下,人們在辦公室。除非我爲他們設置模擬器。

我可以用Moq做到嗎?如何?

我很喜歡編寫測試和嘲笑,所以如果您需要更多的解釋,請詢問。

回答

2

你也許可以用Moq或其他動態模擬來做到這一點,但它聽起來不像是一個好主意。

您描述您的需求的方式聽起來像是您希望Web服務包含非平凡數量的邏輯 - 可能不像最終生產Web服務那樣複雜,但至少有一組啓發式規則。這聽起來很像Fake而不是Mock

簡而言之,Fake是依賴關係的輕量級實現。

另一方面,模擬提供或多或少的預先靜態的輸入答案,同時驗證輸入是否是預期的。這聽起來完全不像你所描述的。

簡而言之,實現您所描述的最好方法是編寫一個輕量級的Web服務版本,並按照您的描述進行操作。如果您需要生成一些虛假測試數據,則可以考慮使用AutoFixture

+0

我創建了一個假實現,它會在所有常規調用中生成並返回預期的假結果。當我想要有一個特殊情況,比如不在辦公室時,它包含一個「緩存」,我可以填充測試結果並在參數匹配時返回。 – CaffGeek 2010-01-13 20:43:04

1

有一個誤解的差異bethween嘲弄和存根[馬丁Forler:模擬是不是存根(http://martinfowler.com/articles/mocksArentStubs.html] 基本上模擬對象作爲與它允許您驗證過程中的一些測試場景測試方法的機理對象(主要是單元測試)正確地使用對象(即,驗證被測試的方法以正確的順序調用模擬對象的方法,設置參數並訪問屬性三次...)。模擬用於測試方法在單元測試中是否使用超出其邊界的另一個對象 另一方面,存根正在模擬某些行爲(這是我認爲你所尋求的)

1

你可以嘗試sourceForge的基於web的模擬實用程序。該應用程序允許基於特定輸入標籤值配置選定的響應。

http://sourceforge.net/projects/easymocker

Web服務莫克是一個易於使用的,完全基於Web的SOAP Web服務嘲諷效用。此實用程序在單元測試,組件集成測試和非功能性需求測試期間在SOA開發環境中非常有用。