用VS內建的Unit Test測試一個方法時,若需要大量的輸入參數,可以按照以下方法把參數放在一個檔案(資料庫也可)裡,可以省去重複代碼。
假設要測試的方法為:
static int Sum(int x, int y) { return x + y; }
右鍵這個方法,自動建立出unit test工程,這個大家都知道的,就不說了
建立的測試代碼如下:
/// <summary> ///A test for Sum ///</summary> [TestMethod()] [DeploymentItem("ConsoleApplication1.exe")] public void SumTest() { int x = 0; // TODO: Initialize to an appropriate value int y = 0; // TODO: Initialize to an appropriate value int expected = 0; // TODO: Initialize to an appropriate value int actual; actual = Program_Accessor.Sum(x, y); Assert.AreEqual(expected, actual); Assert.Inconclusive("Verify the correctness of this test method."); }
在菜單中選擇Test下的Windows => Test View
圖。。。
在出現的Test View列表中選擇要測試的方法,右鍵選擇屬性
圖。。。
點Data Connection String右邊的小button,
圖。。。
我們可以選擇其中任一種,這裡我們選擇xml,這個xml中描述了我們需要用到的資料
圖。。。
如果xml格式正確,可以預覽出
我的xml如下:
<InputParameter> <Parameter> <x>0</x> <y>0</y> <expect>0</expect> </Parameter> <Parameter> <x>65536</x> <y>1</y> <expect>65537</expect> </Parameter> <Parameter> <x>-65536</x> <y>-1</y> <expect>-65537</expect> </Parameter> </InputParameter>
一路OK下去,最後發現我們的測試方法上面增加了一段話:
- [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\SumParameters.xml", "", DataAccessMethod.Sequential), DeploymentItem("××××.UnitTest\\SumParameters.xml"), DeploymentItem("ConsoleApplication1.exe"), TestMethod()]
DeploymentItem中指定了xml檔案的路徑,如果改變了xml的路徑,也要在這裡做相當的更改。
下面我們改一下測試方法的代碼:
/// <summary> ///A test for Sum ///</summary> [DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\SumParameters.xml", "", DataAccessMethod.Sequential), DeploymentItem("Microsoft.SeoTools.UnitTest\\SumParameters.xml"), DeploymentItem("ConsoleApplication1.exe"), TestMethod()] public void SumTest() { int x = int.Parse(TestContext.DataRow["x"].ToString()); int y = int.Parse(TestContext.DataRow["y"].ToString()); int expected = int.Parse(TestContext.DataRow["expect"].ToString()); int actual = Program_Accessor.Sum(x, y); Assert.AreEqual(expected, actual); }
我們可以用TestContext.DataRow去訪問測試資料中的欄位。
在xml中我們的測試資料有三條,在run這個測試方法時,unit test會依次擷取這三條記錄並運行。我們的代碼中只用寫一次,挺帥的,哈哈
關於unit test的一些介紹,可以參見
http://msdn.microsoft.com/en-us/library/ms379625(VS.80).aspx