【转】走进单元测试三:实战单元测试
上一篇 / 下一篇 2013-08-08 14:50:00 / 个人分类:测试技术
前两篇文章讲解了一些关于单元测试的基本理论知识,接下来我们应该理论联系实践,在实践中体会单元测试带给我们的便利!
环境:VS2008,2010版本!
目录:
1.前言
2.单元测试框架
3.断言(Assert)
4.测试异常
5.忽视测试
6.数据驱动测试
7.单元测试的利器 → Moles技术
1.前言
一个完整的测试必须符合以下几点:
A) 考虑到各种情况,准备测试所需要的各种数据,这一步是测试的关键所在!
B) 调用要测试的方法!
C) 验证被测试方法的行为跟预期的是否一致!
D) 完成验证测试之后清理各种资源!
2.单元测试框架
测试框架的DLL文件名为: Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
在VS自动创建单元测试项目就会自动引用这个DLL了!
测试类的基本结构如图:
基本的测试类结构就是这样的!
3.断言(Assert)
在单元测试代码里断言是无处不在的,我们应该合理的使用断言来验证数据!
它是一个静态类,主要有下面几种方法用来验证函数的结果跟我的预期是否一致!
① Assert.AreEqual
主要是验证函数产生的影响值或返回的值跟预期是否一致,这个方法不适合验证返回的数据集以及集合之类的数据,主要针对字符串,数字等等的单一类型,它还有个泛型重载,这个是比较好的,建议多使用,它还有第三个参数,是一个string型的message,基本上不会用到!
☆ Note:不要把参数的含义搞混,第一个参数是你的期望值(Except),第二个参数是函数返回或影响程序产生的实际值(Actual),不要把两个颠倒过来,因为如果运行正确没有什么大碍,如果运行产生错误,有的时候就会看错掉,造成判断失误,要注意了,这是一个规范!
例子:
Assert.AreEqual<string>("a", "a", "cheng xu yuan");
② Assert.AreNotEqual
没什么要讲的,情况跟上面相反,主要是验证实际值跟期望值不相等的情况!③ Assert.AreSame
判断实际值跟预期值的类型是否一致!
④ Assert.AreNotSame
跟上面正好相反,测试类型不一致!
⑤ Assert.IsNotNull,Assert.IsNull,Assert.IsTrue,Assert.IsFalse
看这些方法名就知道什么意思了!
⑥ Assert.IsInstanceOfType,Assert.IsNotInstanceOfType
判断指定的对象是否是指定的类型!
⑦ Assert.Fail
迫使断言失败,不管前面的断言是否都成功了,但测试结果是错误的,因为我强制断言失败了!
总结:一个好的测试案例,里面的断言至少是大于一个的,这样才能验证数据的准确性,保证验证数据的严谨性!
例:如果实际值是个DataSet一般测试流程为:①判断是否为“null” → ②判断是否为“Empty”(验证是否有数据) →③ 接下来再验证数据的一致性,所以验证DataSet的基本流程就是这样的!
/// <summary> Assert.IsNotNull(actual); //第一步 验证是否为Null |
4.测试异常 → ExpectedException(异常属性)
当代码中有抛出异常的情况时,我们应该对这个异常的准确性进行测试,首先要捕获这个异常,然后再跟我预期定义的异常进行比较就行了!
在VS自带的测试框架中提供了处理异常的测试!
这个异常属性有两个构造函数重载:
第一个参数:函数中出现异常的类型 → [ExpectedException(typeof(NullReferenceException))]
第二个参数:异常所提示的信息(Message) → [ExpectedException(typeof(NullReferenceException),"Don't is null.")]
总结:在测试一些非法数据,边界值,异常测试是非常有用的,一旦发现异常,后面的一切断言和代码将跳过,然后系统将会把异常和你预期的异常进行比对,一致则表示通过,反之有错误!
/// <summary> /// Is null. /// </summary> [TestMethod()] [RollBack()] [ExpectedException(typeof(NullReferenceException))] //第一种只定义了异常类型! public void UpdateLookupChequeNumberRegion_UpdateChequeNumberRegionAndDataSetIsNull_ThrowException() { LookupChequeNumberRegionDataSet actual = target.UpdateLookupChequeNumberRegion(null); } /// <summary> /// Add. /// </summary> [TestMethod()] [RollBack()] //第二种定义了预期的异常类型还定义了异常信息! [ExpectedException(typeof(BusinessException), "The category and code combination you have entered already exist. Please enter a different category and code combination.")] public void UpdatePolicyConsideration_AddPolicyTheCODEIsSame_ThrowException() { string newGUID = Guid.NewGuid().ToString(); CodeTableDataSet expectedDataSet = target.GetPolicyConsideration(); expectedDataSet.T_IC_CODE.AddT_IC_CODERow(GetNewRow(expectedDataSet, null, ref newGUID)); CodeTableDataSet actual = target.UpdatePolicyConsideration(expectedDataSet); }5.忽视测试 → Ignore属性 添加这个属性表明现在这个测试案例在运行时将不会被执行,跳过此方法!
6.数据驱动测试 在上一篇提到过当你的数据量很大的时候,有一种解决方案是采用数据驱动测试,把我们需要用来测试的数据放在文件中,然后运行测试,让测试代码去读取文件中的数据! 其实它也有一定的局限性,所以在合理的场合中合理的使用将减轻我们的工作量,这个判断只能给为看官去判断了! 当前支持Sql Server ,Oracle,CSV,XML等等文件,下面我就介绍下CSV和XML文件的使用方法! ①CSV作为数据文件 我们写一个简单不能再简单的的加法运算方法来作为示例:
a) 首先要创建连接字符串,具体步骤如下: I, II, III, 通过上面步骤的操作,就会进入选择文件的界面,按照提示即可完成,当然前提你的数据文件要准备好,完成之后会出现如下代码:
点击运行你的测试,程序会通过你设置的路径去文件里面一行一行的读取数据,然后验证数据,如果其中有一行数据报错,那么整个测试也就是失败了,所以保证数据的正确性很重要! 注意:CSV默认会以Excel的方式打开,但是它里面的数据摆放有一个规则,就是以逗号的形式呈现,所以我还是建议大家使用记事本来添加数据! ②使用XML作为数据文件 其实使用方法跟上面的一样,尤其注意的是你XML文件里面数据的格式!
注意:怎么来获取数据呢?Convert.ToInt32(this.testContextInstance.DataRow["price"]) 通过这样的方式来获取数据,还有在选择文件时,要确认是否选中了一个数据源文件,这个不要疏忽了! ③使用数据库作为数据文件很简单,配置一下连接字符串,设置一下路径就好了,在此就不讲解了! 7.单元测试的利器 → “Mole”技术 首先想感谢下项目组的Tian Mi大哥是他把这项技术带给我们的,谢谢他的无私奉献! “Mole”文件的下载地址:http://www.kuaipan.cn/index.php?ac=file&oid=29568238492847207 ①应用环境: 所属模块依赖于系统的其它模块,依赖于系统的一些配置环境,还有就是调用第三方接口或服务等等的场景! 在这样的场景下我们的测试是不能直接调用第三方接口或服务的,所以我们要制造一个虚拟的环境,当我们去调用接口时,Mole技术会拦截我们调用的方法,从而转向我们自己制造的虚拟环境,那么就不会直接调用第三方接口和服务了! ②基本的操作流程不讲解了,如果你看了http://www.cnblogs.com/hwade/archive/2010/11/26/Moles.html这篇文章就明白了,我就将一些在写测试时遇到的几个小问题! ③如果“Moles”结束后,项目编译的时候报错,具体的错误我也不怎么知道了,但是我在网上搜了很久才找到答案的! 步骤:点击你的Moles文件,你会发现他是个XML配置文件,修改它的属性就好了,如:
|
TAG:
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | ||||||
5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
12 | 13 | 14 | 15 | 16 | 17 | 18 | |||
19 | 20 | 21 | 22 | 23 | 24 | 25 | |||
26 | 27 | 28 | 29 | 30 | 31 |
我的存档
数据统计
- 访问量: 311781
- 日志数: 243
- 建立时间: 2011-07-13
- 更新时间: 2018-07-15