寫了一個類別
public class Class1
{
public int Add(int a, int b)
{
return a + b;
}
}
作了一個單元測試 (Unit Test)
[TestMethod]
public void TestMethod1()
{
var o = new Class1();
int a = 1;
int b = 2;
int c = o.Add(a, b);
Assert.AreEqual<int>(3, c);
}
當然,這個測試通過了。但可惜的是,只能測一個 1 + 2 = 3 的測試案例。如果要測數個案例,要怎麼做呢?
此時,需要一些步驟。
步驟1:增加測試資料
增加一個文字檔 Data.csv, 並加入 TestProject, 內容如下
Val1, Val2, Result 1,2,3 4,6,10 5,7,12 10,-10,0
儲存時,使用 Chinese Trandional (Big5) 的編碼存檔
步驟2:設定部署
執行 Test/Edit Test Settings/Local(local.testsettings)
選取 Test Settings/Deployment 中的 Enable deploymnet 選項。此選項在 Visual Studio 2008 中預設為選取的,但在 Visual Studio 2010 中預設為不選取。
接下來,要在 Test Method 中加上 Deployment 及DataSource屬性,指示進行測試時,需要部署該 Data.csv 檔案。如下
[TestMethod, DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "data.csv", "data#csv", DataAccessMethod.Sequential)]
[DeploymentItem("Data.csv")]
public void TestMethod1()
接著,在 Solution Explorer 中選取 Data.csv,按 F4 打開 Properties Windows,將 Copy to Output Directory 設成 Copy always
步驟3:修改測試程式
這個動作將執行測試時,輸入 Class1.Add 的參數改由測試資料來讀取
[TestMethod, DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "data.csv", "data#csv", DataAccessMethod.Sequential)]
[DeploymentItem("Data.csv")]
public void TestMethod1()
{
var o = new Class1();
int a = Convert.ToInt32(TestContext.DataRow["Val1"]);
int b = Convert.ToInt32(TestContext.DataRow["Val2"]);
int c = o.Add(a, b);
int checkValue = Convert.ToInt32(TestContext.DataRow["Result"]);
Assert.AreEqual<int>(checkValue, c);
}
結果
測試結果如下。注意到雖然我們只寫了一個 TestMethod,但資料有4組,使用 Debug 模式追蹤,也的確跑了4次。但為什麼會顯示5個測試呢?我也不清楚。
Sample code download
1 則留言:
不曉得如果資料是物件的時候,該怎麼表示?
張貼留言