用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