2015-05-04 123 views
2

我有以下方法,其中業務層正在與數據訪問層交互並返回集合對象。我是單元測試新手,但需要爲解決方案添加自動化單元測試。我閱讀了多篇與單元測試相關的文章和理論,但我對如何繼續進行了解。這將是非常有益的,如果有人能指導我用的方法,單元測試數據訪問層c#

[DataObjectMethod(DataObjectMethodType.Select, true)] 
public static WorkQueueBE GetItemByDetailsID(int detailsID) 
{ return WorkQueueDB.GetItemByDetailsID(detailsID); } 

這種方法可以讓在DB層,進而調用存儲過程,從數據庫獲取數據調用GetItemsByDetailsID方法,填補了收集和回報一個東西。

+1

嘗試爲您的數據訪問對象實現[Mock](http://en.wikipedia.org/wiki/Mock_object),並將它們注入業務層。 –

+0

如果OP的目的是測試業務邏輯正在調用預期的數據訪問方法,那麼是的。但我更傾向於猜測它的數據訪問層應該被測試,以便他們調用從部署的數據庫中實際發現的實際存儲過程,並返回適當的對象? –

+0

@JanneMatikainen這將使它成爲一個集成測試,而不是單元測試。 – jessehouwing

回答

1

我會總結一下評論以及添加一些新的想法。你寫

這種方法可以讓在DB層, 進而調用存儲過程調用GetItemsByDetailsID方法,從數據庫中獲取數據, 填充集合,並返回一個對象。

對此的評論是 - >單元測試應該只測試你的邏輯的一個孤立部分,也就是說一個單一的方法。不是整個流程,這是一個集成測試。

從我在你的代碼片段中看到的,你使用具體的類。如果你真的想讓你的應用程序易於測試,你需要使用接口和抽象類,這些類可以被實例化爲具體的類,並且可以輕鬆地進行嘲弄和挖掘。關於如何學習如何實現接口,抽象類和具體類的一種自然方法是進行測試驅動開發。從一個小項目開始,並從中學習:)

如果我想單元測試您提供的方法,我會將您的邏輯與數據訪問層分開。我將通過讓數據訪問層類實現他們應該做的接口來做到這一點。這樣我就可以嘲笑數據訪問層,只返回一個特定的數據片段,就是我需要爲業務層方法創建單元測試的部分。畢竟,在這種情況下,我想測試業務層方法的邏輯,而不是數據訪問層方法。

這是很艱難的開始做單元測試的代碼開發,但是當你開始你的手柄會喜歡它:)

這是一個很大的理論,並沒有具體的例子,因爲我覺得你需要從你自己的一個小項目開始,以TDD的方式進行,通過這樣做,你將瞭解如何在單元測試中工作。

一些鏈接,讓你開始 https://msdn.microsoft.com/en-us/library/aa730844(v=vs.80).aspx https://msdn.microsoft.com/en-us/library/ff847525(v=vs.100).aspx http://www.codeproject.com/Articles/321154/Test-Driven-Development-TDD-in-Csharp

而且Pluralsight有一些這方面的課程。希望這可以幫助!