我一直在考慮建立用TDD方式使用WCF與下面的方法JSON格式化RESTful Web服務應該將產品存儲在磁盤上的文本文件的任務:如何用TDD方法創建一個寧靜的Web服務?
CreateProduct(Product product)
GetAProduct(int productId)
URI Templates:
POST to /MyService/Product
GET to /MyService/Product/{productId}
創建服務和其網絡方法很容易,但
你如何用TDD來完成這項任務?您應該在創建SUT代碼之前創建一個測試。
單元測試的規則說,它們也應該是獨立的和可重複的。
我有一些困惑和問題如下:
1)我應該通過增加,或對服務的URL的基準(編寫針對實際的服務實現我的單元測試在這種情況下,我必須主持並運行服務)?或兩者?
2) 我在想一種方法可能只是創建一個測試方法,我在其中創建一個產品,調用CreateProduct()方法,然後調用GetAProduct()方法並斷言發送的產品是一個我收到的。在TearDown()事件上,我只是刪除了創建的產品。
但我與上述問題是
- 它測試一個以上的功能,因此它不是一個真正的單元測試。
- 它不檢查數據是否正確存儲在文件上
- 它是TDD嗎?
如果我爲每個web方法創建一個單獨的單元測試,然後例如調用GetAProduct()web方法,我必須將一些測試數據物理存儲在服務器上,因爲它不能依賴於CreateProduct()單元測試。他們應該能夠獨立運行。
請指教。
感謝,
實際上,獲取URL和解析結果超出了單元測試,在我看來。單元測試應該在應用程序的類和方法級別上運行,而不是在基礎結構上運行。您還希望避免在測試中使用「真實」存儲,因爲那樣您也在測試數據庫,而不僅僅是使用數據庫的代碼。你應該閱讀有關嘲笑,有大量的信息(例如,[在SO](http://stackoverflow.com/questions/37359/what-c-sharp-mocking-framework-to-use)) –
謝謝尼克拉斯。你說什麼是有道理的,但如果我不測試網址,我將如何測試服務接受JSON格式,或者序列化是否正確?測試網址時,必須使用真實的存儲空間。我想我必須編寫單元測試和集成測試的混合體? TDD說什麼? –
我不明白TDD與此有什麼關係。它只是說你應該在實現之前在一些迭代過程中編寫測試。至於你的問題,單元測試將確保(1)你的JSON解析器工作正常(2)序列化工作正常(3)你的服務正在將正確的數據傳輸到底層(你可以使用存根檢查或模擬對象,實現與解析器/序列化器相同的接口/不管)。你也可以測試像URL解析這樣的東西,但*作爲一個獨立的模塊*。除此之外的一切都是集成測試 –