寫了一個類別
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 則留言:
不曉得如果資料是物件的時候,該怎麼表示?
張貼留言