我有一個問題在SO問如何將一箇中間層連接到DataSet。如何分離中間層和數據集以允許進行單元測試?
我提出了一個答案,顯示了我的想法,但我並不滿意緊密耦合。我剛開始進入測試階段,並發現它是我的代碼的一個好目標。
該代碼如何去耦以允許進行單元測試?
謝謝
基思
我有一個問題在SO問如何將一箇中間層連接到DataSet。如何分離中間層和數據集以允許進行單元測試?
我提出了一個答案,顯示了我的想法,但我並不滿意緊密耦合。我剛開始進入測試階段,並發現它是我的代碼的一個好目標。
該代碼如何去耦以允許進行單元測試?
謝謝
基思
IMO;數據集是邪惡的。他們是,而且應該只能用作離線數據庫。沒有更多,IMO。但是,您在數據訪問層(DAL)中執行的操作不應該真正影響您的業務層(BL)。我只是在它們之間使用對象(使用接口)(IList),然後使用一個接口來定義你的DAL(IRepository),你可以嘲笑那個接口來返回你的BL中需要的單元測試。單元測試數據集是另一個野獸,從來沒有嘗試過,我希望從來沒有...也許內存中的數據庫是你最好的選擇...
哦,而且嘲笑我用RhinoMock取得了一些成功。我也鼓勵你看看IoC(http://www.castleproject.org/)。
如果你有實體對象,你可以用嘲笑的單元測試你的中間層。
你試過Spring.net?它會使你的代碼更乾淨,更少耦合。它還提供useful classes來完成您的集成測試。
這取決於你想考什麼:
這裏有一個建議:
訂單中包含其所有的孩子。這是一個整體,是一個整體。
var dataset = orderDatabase.GetOrderAndDetailsBy(id);
存儲庫可以使用生成器來創建命令:
var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);
var order = repository.GetOrderBy(id);
存儲庫從數據庫中獲取數據: 您從一個存儲庫的細節得到一個訂單
您將不得不創建一個存儲庫,如下所示:
var repository = new OrderRepository(orderDatabase, orderBuilder);
現在,您可以使用虛假協作者創建存儲庫,具體取決於您要測試的內容。
我同意。我目前有一個使用NHibernate,Castle Windsor和RhinoMock的應用程序,我非常高興。 我使用Repository模式,併爲我的單元測試幾乎完全從DAL解耦。 永遠不會想再次回到數據集 – Tigraine 2008-10-28 18:50:20