它支持:
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()”雙擊,便可查看代碼覆蓋率。
在“代碼覆蓋率結果”窗口中,我們還可以查看單元測試中代碼覆蓋的塊數,以及代碼覆蓋的百分比信息。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/