2010-09-17 77 views
2

Visual Studio 2010爲我生成了一堆單元測試,這似乎很方便,但我質疑它們是否是實際的單元測試。例如,它生成的測試稱爲SaveTest它執行以下代碼:MsTest生成實際單元測試的測試嗎?

User user = new User(); //I have to create a user 
user.Save(); //This saves the user to the database. 
//Assertions here.... 

我上面的問題是,從我已閱讀,單元測試應該孤立地測試的東西,所以通過測試節約到數據庫,這不是一個單元測試,或者我錯了,MsTest會錯誤嗎?作爲一個附註,User由dbml生成,並在我的DataContext上保存calles SubmitChanges。

回答

9

自動生成的測試只是單元測試,如果您已經完成必要的工作來隔離依賴關係,以便帶副作用的調用可以路由到合適的模擬或存根依賴關係以感知所需的效果。這些工具不會構建您的代碼以支持單元測試;他們所能做的就是創建對各個公共接入點的呼叫。您還需要爲每個測試安排依賴狀態並聲明您希望檢查的條件。

+0

啊,好吧,我正要按保存幾乎一模一樣的速度。 – tim 2010-09-17 15:42:34

2

MSTest的,據我所知,是不夠聰明,知道如何嘲笑的行爲,它測試。因此,如果您自己不嘲笑用戶的數據庫依賴關係,則不是單元測試。像MSTest的和NUnit

「單元測試」框架,提供比環境來運行一套程序測試的更多一點。你用[Test]屬性或類似的裝飾方法,它會運行它。該測試可以在單元,集成,功能甚至接受級別上,具體取決於測試覆蓋的代碼範圍。在我們的項目中,我們有一個完整的程序集,除了集成測試之外,它涵蓋了整個垂直切片的功能,甚至包括模型客戶驗收測試用例。所有這些都是使用NUnit框架編寫的。

你的開發環境,不能防止你在發展的錯誤;如果那是真的,則不需要質量保證。

+1

MSUnit?你的意思是MSTest或[MbUnit](http://www.mbunit.com)? – 2010-09-17 18:29:47

0

所有這些單元測試框架都沒有真正限制做單元測試。

你可以做很多不同的測試類型的人,包括完整的系統測試,集中集成測試。特別是當你添加你的測試代碼/運行器中使用的額外框架工具時。

如果你有一個非常薄的類,它的唯一責任是與外部系統進行集成,然後如果你創建測試,它周圍的那些都是集中集成測試,是做得最好打外部系統。只要確保將它們與單元測試分開放置,因爲這些會自然變慢。

如果在另一方面,具有硬依賴於外部系統的類不只是薄類,那麼問題是你的代碼)。解決它,從本質上說,你的測試不會有這個問題。