VSTS單元測試

來源:互聯網
上載者:User

 

Microsoft的開發平台VSTS(Visual Studio Team System) 整合了單元測試架構(Team Test),即:

VSTS單元測試。    它支援:
                                          1. 產生測試代碼架構;
                                          2. 在IDE中運行測試;
                                          3. 支援從資料庫中載入資料的測試;
                                          4. 測試回合完成後,進行程式碼分析覆蓋。

使用VSTS寫單元測試的步驟如下:
                                                  1. 建立測試;
                                                  2. 編寫測試;
                                                  3. 運行測試;
                                                  4. 代碼覆蓋。

1.  建立測試

開啟解決方案中的.cs類檔案(如:StudentManager),在其中的一個方法(如:AddStudent() )上右擊,選擇“建立單元測試”命令。

在彈出的“建立單元測試”對話方塊中的“輸出項目”下拉框中選擇“建立新的Visual C# 測試專案”,單擊“確定”按鈕,並在“建立測試專案”對話方塊中輸入測試專案的名稱(如:MySchoolTest),單擊“建立”按鈕後,就看見在原有的解決方案中產生了一個新的項目“MySchoolTest”。

測試專案建立成功後,會同時產生4個與測試相關的檔案:

AuthoringTest.txt                  提供建立測試的說明,包括向項目增加其他測試的說明;

StudentManagerTest.cs         包含AddStudent()的測試,以及測試初始化和測試清除的方法;

MySchoolPro.vsmdi                測試管理檔案;

localtestrun.testrunconfig      本地測試回合設定檔。

2.  編寫測試

建立測試完畢後,VSTS 為我們自動產生的只是一個測試架構,預設代碼中Assert.Inconclusive 表明這是一個未經驗證的單元測試。

開啟產生的測試檔案“StudentManagerTest.cs”,    如樣本1:

[TestMethod]
public void AddStudentTest()
{
   global::MySchool.BLL.StudentManager target = new
               global::MySchool.BLL.StudentManager();  
   
   // TODO:初始化為適當的值
   global::MySchool.Models.Student student = null;
   string expected = null;
   string actual;
   actual = target.AddStudent(student);

   Assert.AreEqual(expected, actual,
                    "MySchool.BLL.StudentManager.AddStudent 未返回所需的值。");
   Assert.Inconclusive("驗證此測試方法的正確性。");
}

 

單元測試中,幾個變數的簡單介紹:

target         表示測試目標對象,通過這個目標對象可以測試該類中的各個方法;

expected    表示期望得到的值;

actual         表示實際得到的值;


單元測試中,常用的斷言方法介紹:

Assert.AreEqual()          測試指定的值是否相等,如果相等,則測試通過;

Assert.Inconclusive()    表示一個未驗證的測試;

Assert.IsTrue()              測試指定的條件是否為True,如果為True,則測試通過;

Assert.IsFalse()             測試指定的條件是否為False,如果為False,則測試通過;

Assert.IsNull()               測試指定的對象是否為空白引用,如果為空白,則測試通過;

Assert.IsNotNull()          測試指定的對象是否為非空,如果不為空白,則測試通過;

 

我們通過對樣本1 添加測試所需的初始值,並對斷言進行簡單的修改後,便得到一個正式的單元測試。

如樣本2:

[TestMethod]
public void AddStudentTest()
{
   global::MySchool.BLL.StudentManager target = new
               global::MySchool.BLL.StudentManager();  
   
   // TODO:初始化為適當的值
   global::MySchool.Models.Student student = new
               global::MySchool.Models.Student();   // 修改1
           student.LoginId = "003";
           student.LoginPwd = "test003";
           student.UserStateId = 1;
           student.studentName = "test003";
           student.studentNo = "test003";
           student.Sex = "男";
           student.ClassID = 1;

   string expected = "學員帳戶建立成功!";   //修改2
   string actual;
   actual = target.AddStudent(student);

   Assert.AreEqual(expected, actual,
                    "MySchool.BLL.StudentManager.AddStudent 未返回所需的值。");
   // Assert.Inconclusive("驗證此測試方法的正確性。");
}

 

 

這樣,便得到了一個正式的單元測試。用斷言Assert.AreEqual()比較expected、actual是否相等。
如果相等,測試通過。

設定檔中的設定
由於我們的測試需要和資料庫打交道,並且資料庫的連接字串是從設定檔中讀取的,所以我們需要在測試專案中添加設定檔(app.config)。

如樣本3:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
        
    <connectionStrings>
             //資料庫連接字串設定
            <add name="DataBaseOwner"  connectionString="dbo" />
            <add name="MySchoolConnectionString"  
                    connectionString=" Data Source=.; Initial Catalog=MySchool;
                                              User ID=sa; Password=123456 "
                    providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

 

3.  運行測試

開啟包含有測試專案的解決方案,在 工具列 就會出現與測試專案相關的 操作按鈕欄。
我們要運行項目中的測試,只需要運行測試專案。

測試專案的運行方式有兩種:
                                   
      運行,並啟動調試功能;
                                          運行,但不啟動調試功能;

1.  當我們運行測試後,在“測試結果”視窗中,將列出項目中所有的測試。

2.  開始的時候,測試會處於“掛起”的狀態,測試回合的結果是“通過”或者“失敗”。

3.  如果我們要查看測試結果的額外細節時,選定測試項並雙擊,便開啟了詳細資料視窗。


4.  代碼覆蓋

代碼覆蓋是單元測試的一個關鍵計量。

代碼覆蓋:是指單元測試運行時,覆蓋了多少代碼。

Team Test 包含了一個代碼覆蓋工具,可以詳細解釋被執行代碼的覆蓋率,並反白哪些代碼被執行,哪些代碼沒有被執行。

注意: VSTS 在產生單元測試架構時,預設沒有啟用“代碼覆蓋”功能。

啟用此功能的辦法:

1.  首先開啟“本地測試回合設定檔” localtestrun.testrunconfig ,在解決方案中。

2.  雙擊“localtestrun.testrunconfig”檔案,彈出該對話方塊視窗。

3.  在其對話方塊視窗的左側選擇“程式碼涵蓋範圍”,然後在右側的“要檢測的項目”中選擇要檢測的項目。

4.  單擊“應用”按鈕。

當我們啟用了代碼覆蓋功能後,再次運行單元測試時:

在“程式碼涵蓋範圍結果”視窗中,選中“AddStudent()”雙擊,便可查看程式碼涵蓋範圍。

在“程式碼涵蓋範圍結果”視窗中,我們還可以查看單元測試中代碼覆蓋的塊數,以及代碼覆蓋的百分比資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.