2010-06-07 109 views
4

嗨我已經搜索了一些其他帖子,但大多數人認爲人們知道他們在單元測試中做了什麼,坦率地說我沒有。我看到了單元測試背後的想法,而且我現在正在盲目地編寫一個Silverlight應用程序,我想寫一些單元測試以確保我在正確的道路上。我希望能夠使用SL4 vs 2010 silverlight單元測試項目模板,以保持簡單並且不使用外部工具。所以我需要一個答案是這樣的問題:第一次單元測試(在Silverlight中)

什麼是單元測試的方法? 單元測試和自動單元測試之間有什麼區別? 如何在silverlight中進行有意義的單元測試? 單元測試(silverlight)時應該注意些什麼?

也應該在我的silverlight應用中實現某種IRepository模式,以使單元測試更容易?

編輯:

我將在這裏發佈有用的鏈接,我沿途遊覽:

實現MVVM在Silverlight - http://community.infragistics.com/pixel8/media/p/91949.aspx

MIX10 MVVM談話 - http://live.visitmix.com/MIX10/Sessions/EX14

單元測試Ria應用程序 - http://blogs.msdn.com/b/vijayu/archive/2009/06/08/unit-testing-business-logic-in-net-ria-services.aspx

PK的好資源:http://dotenetscribbles.blogspot.com/2009/12/unit-testing-dependency-injection-and.html

+0

+1。對於我們這些真正不知道如何處理單元測試的人來說,這是個大問題。 – 2010-06-07 23:24:24

回答

2

我從來沒有用過silverlight單元測試項目模板。我只使用nunit在silverlight中進行單元測試。所以,我會讓別人回答。 至於你的其他問題:

單元測試應該驅動你的設計。你的單元測試是你的代碼的第一個用戶。您的代碼基於某些期望,並且單元測試驗證了期望得到滿足。使用MVVM模式(就像使用silverlight一樣),便於單元測試。要記住的最重要的事情是你必須編寫可測試的代碼。要編寫可測試代碼,最重要的是要注意依賴關係。例如,如果你的代碼調用了數據庫。你,不能有一個單元測試撥打數據庫。相反,你會嘲笑你的數據acccess層。這就是像模擬和存根這樣的概念出現的地方。我在我的sivlerlight單元測試中使用moq來模擬。我認爲促進單元測試的另一個重要的事情是單一職責原則。最後,把你的測試代碼當作生產代碼處理,否則你的測試可能會給你一個錯誤的概念,期望得到滿足。你的單元測試是代碼,因此可能有錯誤。

單元 測試和自動化單元測試之間有什麼區別?

我不是很確定這是什麼意思。單元測試是白盒測試的一種自動化方式。每次簽入存儲庫中的任何代碼時,您都可以擁有運行所有單元測試的腳本。這可以是持續集成的一部分。

如何在 的Silverlight

在Silverlight我有意義的單元測試,以方便測試,你應該使用的命令,而不是編寫代碼的代碼隱藏文件。這允許您在單元測試時模擬按鈕點擊和其他GUI事件。使用MVVM模式和命令,您可以測試所有C#代碼(不是xaml),直到UI(轉換器,虛擬機等)。

在這個答案中很難提及所有的東西。我會建議,你谷歌的MVVM,命令在Silverlight,馬丁福勒 - 模擬不是存根,嘲笑silverlight的框架,依賴注入

+0

我希望你能夠在不對應用程序進行重大更改的情況下實現某些功能。即我看到這一點: \t \t公衆的IQueryable GetAspnet_Users() \t \t { \t \t \t回報this.DataContext.aspnet_Users; \t \t} 我注意到返回是this.DataContext.aspnet_Users,所以沒有辦法只是用某種模擬數據庫切換datacontext,然後在我的測試類中運行domainservice方法? 我的意思是,對於我未經訓練的眼睛,我會有這樣的事情。DataContext = MockDBStructure; MockDBStructure:IDBStructure 是不是可能? – Jakob 2010-06-08 14:32:35

+0

@Jakob。嘲笑IDBStructure的實現是非常有可能的。所以,我假設你正在接收DataContext作爲依賴項,或者具有方法GetAspnet_Users()(實現某個接口)的類實例被注入(通過ctor/property/method傳遞)。 – 2010-06-08 15:15:48

+0

@PK。目前包含GetAspnet_Users()方法的DomainService的肺癌是 公共類的DomainService:LinqToSqlDomainService 所以我真的不知道我會如何交換的datacontext,得到一些IRepository模式實現,方便單元測試 – Jakob 2010-06-08 16:50:55