VS2010单元测试 -- 入门
从一个简单的实例入手
一、编写需要测试的类,该类为String对象扩展了IsIn方法,目的是判断当前字符串是否存在于指定的数组中,代码如下:
public static class HelperString
{
public static bool IsIn(this string str, string[] strs)
{
if (strs == null) { if (str == null) { return true; } return false; }
foreach (string item in strs)
{
if (str == item) { return true; }
}
return false;
}
}
二、右键方法名称 --> 选择创建单元测试 --> 弹出创建单元测试对话框 --> 点击确定(如果不使用默认设置可选择窗口左下角的“设置”按钮)
三、VS会自动创建Test项目,如果是默认设置,测试项目生成的类名称 = “HelperStringTest”,用于测试“IsIn”方法的名称为“IsInTest”。
四、测试属性
每个测试类都会标记[TestClass]属性,方法为[TestMethod]。
五、在IsInTest方法中添加测试代码,以下我为IsIn方法写了6个测试用例。
Assert.AreEqual(true, HelperString.IsIn("1", new string[] { "1", "2", "3" }));
Assert.AreEqual(false, HelperString.IsIn("5", new string[] { "1", "2", "3" }));
Assert.AreEqual(false, HelperString.IsIn("5", null));
Assert.AreEqual(true, HelperString.IsIn(null, null));
Assert.IsTrue(HelperString.IsIn("2", new string[] { "1", "2", "3" }));
Assert.IsFalse(HelperString.IsIn("4", new string[] { "1", "2", "3" }));
六、Assert测试帮助类介绍
详细请查阅 http://msdn.microsoft.com/zh-cn/library/microsoft.visualstudio.testtools.unittesting.assert.aspx
七、右键点击测试方式 --> 选择运行测试 --> 在测试接口窗口中查看测试结果,运行测试的快捷键(Ctrl + R + T),如果需要进行调试则可以按F5。
至此,一个简单的单元测试已经完工了,下面我们来查看代码覆盖率(即本次运行的单元测试覆盖了被测试程序集的哪部分代码块),设置方法如下:
单击菜单栏中的测试 --> 编辑测试设置 --> 本地(local.testsettings) --> 弹出测试设置对话框 --> 在左边的列表中选择数据和诊断 --> 在右边名称列表框中选择代码覆盖率,选中
--> 单击名称列表框上边的配置按钮 --> 弹出代码覆盖率详细信息对话框 --> 选择要检测的项目(即“IsInfo”方法所在的程序集) --> 单击确定
重新运行测试程序 --> 单击菜单栏中的测试 --> 窗口 --> 代码覆盖率 --> 在VS下方的代码覆盖率窗口中即可查看被设置程序集的代码覆盖率情况,也可以在被测试的类中查看代码覆盖
情况(如果没有被覆盖,则以淡红色显示)。
接下来我们创建一个简单的数据驱动的单元测试,提取出一个表中的记录,并保存在一个变量中,以备后用。
一、在测试类中添加一个方法“FromSqlTest”,表示数据源来自SqlServer,并添加[TestMethod]属性(这是每个单元测试方法必须得属性)。
二、为测试方法添加[DataSource]标签,全部代码如下所示:
[DataSource("System.Data.SqlClient",
@"Data Source=HNJCHENNANFEI;
Initial Catalog=Linq;
Integrated Security=True",
"Linq_Class", DataAccessMethod.Sequential), TestMethod]
public void ToSqlTest() {
string str = TestContext.DataRow["Name"].ToString();
}
三、DataSource参数介绍
1、获取此数据源的固定提供程序的名称。
2、设置连接字符串
3、设置数据表名
3、枚举值,当前设置为按顺序读取数据表中的记录,另一个选项是随机
详细请查阅 http://msdn.microsoft.com/zh-cn/library/microsoft.visualstudio.testtools.webtesting.datasource.aspx
四、TestContext
TestContext.DataRow会循环获得数据表中的每条记录