标签:
单元测试是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。
还有这样一种单元测试的定义:一个单元测试是程序员编写的一段代码,用于执行另一段代码并确定那段代码的行为是否和程序员的期望一致。
准备测试所需要的各种条件(创建所有必须的对象,分配必要的资源等等)
调用要测试的方法
验证被测试方法的行为和期望是否一致
完成后清理各种资源
6个方面:Right-BICEP
Right——结果是否正确;
B——是否所有的边界条件都是正确的?
I——能查一下反向关联吗?
C——能用其他手段交叉检查一下结果吗?
E——你是否可以强制错误条件发生?
P——是否满足性能要求?
详细解释
Right:结果是否正确
如果代码能运行正确,如何才知道它是正确的呢?
1、使用更明确的设计文档
2、真实环境数据
3、????
B:边界条件
尽可能的至少各种特殊或者意外的情况,测试程序是否能正常工作,如:
边界条件的-CORRECT
Conformance(一致性)值是否和预期的一致
Ordering(顺序性)值是否应该的那样有序或者无序
Range(区间性)值是否位于合理范围
Reference(依赖性)代码是否引用了一些代码本身控制范围之外的资源
Existence(存在性)值是否存在(是否非空,非零,在集合中等等)
Cardinality(基数性)是否恰好有足够的值
Time(相对或绝对的时间性)所有事情的发生是否有序?是否在正确的时间?是否恰好及时?
I:检查反向关联
通常一些结果可以使用反向的逻辑关系来验证它们是否正确,如:计算a*b的函数,测试方法如下:
Publicvoid UsingInverse(){
double x = MyMath.AB(4,4);
Assert.AreEqual<double>(x,4*4);
}
C:使用其他手段实现交叉检查
计算一个结果可以存在多个算法,同一个算法可以使用稳定的版本来校验新改进的版本,如:
Publicvoid UsingStd(){
double number = 23214.01;
double result1 =MyMath.旧方法(number1);
double result2 =MyMath.新方法(number1);
Assert.AreEqual<double>(result1,result2);
}
E:强制产生错误条件
真实运行环境各种出乎意料的事情都可能发生,如断电,断网等等。在测试中模拟这些情况可以使用Mock对象来实现。
P:性能特性
如数据采集的功能,在十个网站上进行采集工作很正常,那么在1000个网站上或更多的网站上进行采集它的速度如何?是否写个单元测试?
自动化(Automatic)
彻底的(Thorough)
可重复(Repeatable)
独立的(Independent)
专业的(Professional)
详细解释
Thorough彻底的
测试所有可能会出现问题的情况,一个极端是,对于每行代码、代码可能到达的分支,每个可能抛出的异常等等,都可以作为测试的对象。另一个极端是,你仅仅测试最可能的情况---边界条件、残缺和畸形的数据等等。然而这些都基于项目需求的决策问题。这些所说的归纳为“代码覆盖率”。
Repeatable可重复
测试应该独立于所有其他的测试,而且必须独立于周围的环境。目标只有一个,就是测试应该能够以任意的顺序一次又一次的运行,并且产生相同的结果。如果结果不同,则存在BUG。
Independent独立的
编写测试时,确保一次只测试了一样东西,但并不表示一个TestMethod内只能使用一个Assert,而是一个测试函数应该专注于产品代码中的一个函数,或者组合起来并共同提供某个特性的一组函数。
Professional专业的
测试代码必须同产品代码相同的风格来编写。这意味着你需要抽取出共同且重复的代码,并把它们放到一个功能类之中,从而可以复用;单元测试的代码一样讲究------维护封装,DRY原则,降低耦合。
上面有两张图对比,第一张是“立即测试”的图片,表示不用单元测试,自己敲代码,敲完一条线后才可以做调试或者运行看是否符合预期值,第二张图片表示“单元测试”,写一个函数或者方法就立刻进行测试,粒度很细的能够看到每个单元的直接效果,虽然一开始耗费时间比较多,但是在后期的集成测试,功能和性能测试的阶段能够有效保证代码质量,减少测试时间。所以说,单元测试是让我们的工作更加的轻松,并且让我们的设计变得更好,大大减少我们花在调试上面的时间。
单元测试的核心内涵:使用简单有效的技术就是为了令代码变得更加完美。
ps:个人有感:要想做单元测试,首先,你要自己认同单元测试,相信单元测试能够给你带来更多的利益,愿意去做单元测试,总在后面催着赶着大家做单元测试,是没有多大意思的一件事情。
标签:
原文地址:http://blog.csdn.net/caozhangyingfei0109/article/details/43916975