顯示具有 VSTS篇 標籤的文章。 顯示所有文章
顯示具有 VSTS篇 標籤的文章。 顯示所有文章

2008年4月18日 星期五

VSTS 2008設計Unit Test單元測試(3)-測試方法(TestMethod)的例外處理

在測試專案中,實作Method的單元測試時會用到TestMethodAttribute,簡單來說,測試方法必須放置在測試類別中,並且以 TestMethodAttribute 標示,如此才能生效。

當測試的過程當中,假設想要刻意忽略某一種例外造成測試失敗時,就可以使用ExpectedExceptionAttribute來設定Exception物件。這個屬性可用來測試是否程式執行過程當中會丟出這個Exception例外狀況,假設有擲回預期的例外狀況,則測試方法為"成功",反之,如果丟回的例外不是預期的Exception物件,則測試將會失敗。

1.首先挑選要建立的單元測試,如下圖所示。

UnitTestFixed01

2.修改原本類別中的方法,加入判斷式,假設滿足某個條件時,要丟出我們想要監控的Exception例外狀況,程式碼如下。
UnitTestFixed02 

3.確認一下有設定TestMethodAttribute的測試方法,預設透過VSTS 2008所自動產生的測試方法,只會有設定[TestMethod()],所以並不會針對任何其他條件有所限制。

UnitTestFixed03 
4.將這個測試方法加入到測試編輯器中,並且加入核取的項目中,勾選想要測試的方法後,按下執行測試。
UnitTestFixed04 
5.此時測試結果會因為擷取到ApplicationException而回報測試失敗,點選結果可以看到測試的詳細資訊:UnitTestFixed05

6.接著回到測試方法中,加入ExpectedExceptionAttribute來設定ApplicationException物件。
UnitTestFixed06

7.假設測試程式執行過程當中會丟出這個ApplicationException例外狀況,則測試方法為"成功"。
UnitTestFixed07

2008年4月10日 星期四

VSTS 2008設計Unit Test單元測試(2)-執行單元測試

當使用VSTS 2008 建立好測試專案之後(請參考:VSTS 2008設計Unit Test單元測試(1)-建立單元測試),就可以在這個測試專案上執行Unit Test單元測試,然而要執行測試專案中的測試之前,可以透過VSTS 2008的「測試清單編輯器」(可以從檢視-->工具列-->測試工具中找到)來輔助以順利進行測試。
UnitTest08

亞當斯接下來介紹使用VSTS 2008 執行Unit Test的步驟,步驟如下:

1.按下「測試清單編輯器」(上列圖示左邊算來第七個按鈕)後,對著Lists of Tests按下滑鼠右鍵,選擇「新增測試清單」。UnitTest09

2.在建立新測試清單中,設定名稱和描述,並選擇適當的位置。
UnitTest10

3.接著可以挑選測試專案中有標示為[TestMethod()]的測試程式碼,亞當斯在VSTS 2008設計Unit Test單元測試(1)-建立單元測試中有設計一個可供單元測試的方法叫:FillTest,這邊我們要測試這個方法,所以勾選FillTest。

UnitTest11 

4.接著按下左上角的第一個按鈕:「執行核取的測試」,開始執行單元測試,因為當初的程式碼只有寫一小段程式:throw new System.NotImplementedException(); ,因此測試過程中會測試到這個方法是會丟出NotImplementedException例外的,所以結果將會顯是測試失敗(這是正確的現象唷~代表測試正常),測試結果如下圖所示:
UnitTest12

VSTS 2008設計Unit Test單元測試(1)-建立單元測試

測試將完成許多事情,但最重要的是它會評估開發中軟體的品質。通常在開發專案的規劃中,都會有一些專案所注重的事項,當然這還是要看專案的性質來決定,然而如果談到測試為專案帶來的好處的話,亞當斯覺得下列幾點算是有幫助的:

  1. 確定應用程式的行為或功能有符合商業需求或使用者的操作。
  2. 降低整合以及專案部署總成本。
  3. 確保程式的品質,提高客戶滿意度。

其實好處很多啦,林林總總的,要一時在這大放厥詞,可以得要洋洋灑灑一大篇吧!!我想概念的部分就留給各位自個而去問Google囉!這篇文章亞當斯要談的是單元測試(Unit Test)的設計實作部分。單元測試的主要目標是取出應用程式中最小的可測試軟體片段,將它與程式碼的其餘部份隔離,以確定它的行為是否符合您的期望。在整合至模組以測試模組之間的介面之前,各單元都會分開測試。

建立單元測試的步驟如下:

1.首先設計一個系統的架構圖,透過這個架構圖實作所對應的程式專案,詳細的作法可以參考本網站另一篇文章:使用VSTS 2008的ApplicationDiagram設計架構(2)

UnitTest012.在整個方案中,新增一個用來處理主要功能的商業邏輯層(BLL)元件專案,這邊亞當斯將類別函式庫專案命名為CompanyDirectoryBLL。 UnitTest02

3.先設計一個抽象基底類別,接著新增一個Employee類別去繼承用來處理共用邏輯的父類別,然後在Employee中新增一個方法:Fill(),參數則是來自資料存取層(DAL)的物件,如下圖所示。UnitTest03

4.針對Employee.cs類別按下滑鼠右鍵,選取「建立單元測試」,接著在建立單元測試視窗中挑選你要測試的method,這邊亞當斯挑的是在上一個步驟所設計的Fill方法,如下列右邊圖所示:UnitTest04 UnitTest05



 

 

 

5.按下確定後,VSTS 2008將會自動建立一個測試專案,這邊輸入測試專案的名稱:「CompanyDirectoryBLLTest」,按下建立按鈕。

UnitTest06

6.VSTS 2008建立好測試專案,並且自動針對欲測試的類別產生一個測試方法(TestMethod),如下程式碼。這個方法會使用[TestMethod()]的屬性,這個設定能夠讓單元測試架構知道這程式只是一個測試。UnitTest07

2008年3月31日 星期一

使用VSTS 2008的ApplicationDiagram設計架構(2)

使用ApplicationDiagram所設計好的架構,除了可以很快速的規劃出系統的整體架構之外,其實還有另一項很強大的功能,那就是可以使用VSTS開發工具,將ApplicationDiagram所設計規劃的應用程式架構,直接實作成可開發的專案應用程式範本。

接下來亞當斯來介紹一下,如何使用VSTS將ApplicationDiagram實作開發專案的步驟:

1.首先假設亞當斯已經使用ApplicationDiagram設計好一個CRM的系統架構,(詳細設計方式可以參考之前的另一篇文章:使用VSTS 2008的ApplicationDiagram設計架構(1)),如下圖所示:。

04

2.接著,在設計的畫面區,先點選你想實作的系統,按下滑鼠右鍵選擇「屬性」,叫出屬性設定視窗。因為在實作專案應用程式之前必須先設定好相關的屬性,例如:是使用那一種語言開發的,或是要執行在哪一個framework版本上面...等等。亞當斯把以上三個應用程式設定都使用Visual Basic語言,平台是.NET Framework 3.5,設定好的屬性請參考以下圖示。

06-CrmWeb 06-CrmAdmin06-CrmService06-CRMDatabase 

 

3.接著,點選要實作的系統,接著按下滑鼠右鍵,選擇「實作應用程式」,就可以產生這個應用程式的開發專案,這邊亞當斯直接針對設計區的空白處,點選右鍵並選擇「實作所有應用程式」,一次將所有應用程式的專案產生出來。
05 4.透過設計工具,將自動把所有的應用程式開發專案自動產生出來,實作過程當中會跳出下列視窗確認系統自動產生專案範本的設定是否正確,如果確認無誤,手不要抖,直接給它勇敢按下確定。
075.在方案總管中,你將可以看到透過工具自動產生出來的所有專案架構了,這樣可以節省手動設計分散式架構的開發,實在是一個很Cool的設計吧!
09

2008年3月29日 星期六

使用VSTS 2008的ApplicationDiagram設計架構(1)

VSTS提供一個很讚的分散式系統設計的架構規劃樣版,這個樣版使用VSTS 2008建立時,屬於「分散式系統」專案類型,透過這個專案類型下的「應用程式設計」、「系統設計」以及「邏輯DataCenter設計」可以規劃一個蠻完整的分散式整體架構圖,這邊亞當斯先記錄「應用程式設計」專案的設計和操作方式。

1.首先,打開VSTS2008(or VSTS2005),選擇建立新專案,專案類型選擇「分散式系統」,範本選擇「應用程式設計」,設定好專案名稱和位置之後,按下確定。
012.建立好專案之後,在專案的「Solution Items」資料夾下會有一個副檔名為.ad的設計檔,對DemoApplicationDesign.ad雙擊滑鼠,就可以看到DemoApplicationDesign.ad設計區。
3.打開工具箱,先檢視一下工具箱中可以設計架構的控制項,工具箱中會分為三大類,分別為「一般設計工具」、「端點」以及「應用程式」,如下圖所示。
02

4.假設亞當斯要規劃的是一個CRM系統,總共會有一個Windows應用程式當用戶端,一個ASP.NET應用程式當客戶管理WEB使用者介面,一個Web Service負責處理CRM的邏輯運作,最後再加一個Database用來儲存CRM的客戶資料。從工具箱中拖拉適當的控制項到設計畫面中,如下圖所示:
035.最後將這幾個應用程式的關連使用端點串接起來,例如:CrmAdmin會直接存取資料庫,而CrmWeb則先會叫用CrmService這個Web Service,接著透過CrmService中所封裝的服務存取CRMDatabase資料庫,當將這幾個應用程式串接起來之後,整個分散式系統嚴然成型。
04