2012-10-05 72 views
3

我正在嘗試爲返回複雜對象集合的服務編寫一些單元測試(IQueriable<MyObject>來給出一個想法),我不知道如何處理該問題。單元測試返回集合的方法

考慮一下:

public IQueriable<MyObject> GetMyObjects(int someParameterA, int someParameterB) {...}

基本上,一個方法是,根據所傳遞的參數,將輸出相當複雜的對象的集合。

由於應用程序正在開發中,我可以使用本地SQL實例,並且我已經創建了一個方法,該方法將使用一些示例數據填充此DB,以便該服務可以使用某些內容。

我沒有太多編寫單元測試的經驗。好的,我會說實話,我沒有編寫單元測試的經驗。我看到的大多數例子都是用來做一些計算並返回一個結果的方法。因此可以將測試數據源附加到測試用例。如果一種方法要返回兩個數字的總和,那麼數據源將由三列組成:兩個數字和預期結果。因此,憑藉我對單元測試的有限知識,我試圖應用相同的邏輯來測試返回集合的方法......並且我不知道測試應該由什麼組成(我知道我可以輕鬆測試返回元素的數量),更不用說測試用例的測試數據源應該是什麼樣子了。

我知道VS2010有CollectionAssert,但我想我的問題是,我不知道如何在這種情況下創建「預期」值。

對這些方法進行單元測試的最佳方法是什麼?

回答

3

爲數據源創建模擬集合。要麼是成熟的對象,要麼是在測試中創建的複雜對象,然後查看使用模擬框架,例如MoqRhino Mocks

只要您的數據源包含足夠範圍的對象以涵蓋正面,負面和異常情況,那麼您可以針對此數據源編寫一套測試,以涵蓋來自不同輸入狀態的所有預期結果, GetMyObjects

您希望此數據與應用程序運行時的數據保持一致,因此即使您沒有正常使用的所有數據,您也只需擁有足夠的內容即可覆蓋事件你想測試,如:

  • 當源中沒有數據時會發生什麼。
    • 我們是否收到空集或異常?
  • 當有源數據會發生什麼,但不符合您在
  • 當有源數據會發生什麼情況傳遞參數,可以但只有PARAMS比賽
  • 會發生什麼事之一源代碼中有數據,並且您傳遞的參數應返回數據
  • 將錯誤數據傳遞給方法時會發生什麼?
  • 等....
+0

對於後期反應的真誠道歉。我編輯了我的問題。我可以輕鬆地重新創建服務使用的數據庫來返回集合,因爲整個事件仍在開發中(雖然我猜這可能不是最好的解決方案......但在這一點上,這是我得到的最好的解決方案)。我的問題是與測試用例一起使用的數據源。我希望我的問題現在更清楚。 – Shaamaan