2011-04-08 51 views
1

單元測試返回一系列複雜對象的方法的正確方法是什麼?單元測試一系列複雜對象的正確方法是什麼

我正在實施分支查找程序。我有一個返回Branch對象,它具有的各種信息,如

  • 分公司名稱
  • 地址
  • 位置
  • 產品庫存

我有我有一個倉庫的倉庫僞造爲始終返回Branch對象的已知序列,我需要測試我的BranchFinder服務中的邏輯。

Find方法採用Flags枚舉形式的位置(緯度/經度)和產品規範。

public IEnumerable<Branch> Find(Location location, Products products); 

知道搜索是要操作的數據,我可以放心地指定位置和產品規範,並知道會發生什麼,但我怎麼斷言順序是正確的。

例如

var loc = new Location(53.79424, -1.546112); 
var results = service.Find(loc, Products.Milk | Products.Bananas); 

我知道該數據的某個子集應按照一定的順序返回,也即:當您在結果集中迭代從當前位置到分支的距離應增加此給出查詢。

什麼是測試這些規則和情況的正確/最佳方法?

回答

1

我會做的第一件事就是確保您通過接口ILocatorService訪問服務。還要確保它的任何下游依賴關係都可以通過接口使用分支信息(這樣您可以稍後在測試中注入Mock)。另外,要清楚你正在測試ILocatorService本身(以確保你在服務中做的任何修改都會破壞它)。

對於ILocatorService使用,你可以使用RhynoMocks返回結果集的任何依賴關係(它可能會去到DB或一些其他供應商的應用程序給我們的分支列表)

這樣,你的投入ILocatorService撐你正在測試的唯一一件事情是,如果你已經改變了任何邏輯,就會破壞現有的測試/功能。

+0

這就是我正在做的。我想知道的是最好的方式來斷言結果是正確的。我應該按照@Ricardo的建議逐項完成,還是有更好的方法? – 2011-04-08 10:20:43

+1

@Ricardo的方式也不錯。你coudl使用Enumerable.SequenceEqual(),如果你想,但你必須實現IEqutable比較2分支對象 – 2011-04-08 10:26:13

1

如果您知道從Find方法檢索到多少結果,您可以將其轉換爲列表或數組,然後檢查每個位置以檢查Branch對象是否具有正確的值,這就是我的做法。

相關問題