本人水平不高,对自己写的程序不敢保证一定正确,所以常常要时不时的停下来,测试一下是不是能正确运行。
而即便是自己测试通过了,以后说不定还是会遇到这样那样没有预想到的问题,隐藏的bug很难挑,所以总觉得测试应该有什么规矩才可循才对。
所以最近找了本《单元测试之道 C#版》看一看,觉得挺好。记一下笔记,顺便搜罗一下网上的资源。
单元测试的概述
单元测试是开发编写的一小段代码,用于检测被测代码的一个很小的,很明确的功能是否正确。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
执行单元测试是了为证明某段代码的行为确实和开发者所期望的一致。
单元测试的目的是让你对你写的代码更有信心,让你的工作更有效率.
个人理解也就是 尽量保证自己写的每一个小功能都经过测试,都是正确的,这样才能避免乱七八糟的bug引入,使设计更合理。好像写测试浪费了一些编码时间,但实际上写测试的时间是把后期去bug的时间分散到编码阶段去做,总的来将可能还更省时间。好的代码应该是易于测试的,可以通过测试来改善设计。
NUnit的基本使用可以参考网友文章。
附上书后的总结
【注重实效的单元测试总结】
一般的原则:
测试任何可能失败的地方。
测试任何已经失败的地方。
对于新加的代码,在被证明正确之前,都可能是有问题的。
至少编写和产品代码一样多的测试代码。
针对每次编译都做局部测试。
签入代码之前做全局测试。
要回答的问题:
我如何知道代码运行是否正确呢?
我要如何对它进行测试?
还有哪些方面可能会发生错误?
这个问题是否会在其他的地方出现呢?
测试哪些方面:使用你的RIGHT-BICEP
结果是否正确(Right)?
边界(boundary)条件是否正确?
是否可以检查反向(inverse)关联?
是否可以使用其他方法来交叉检查(cross-check)结果?
错误条件(error condition)是否可以重现?
性能方面是否满足条件?
好的测试是A TRIP
Automatic(自动的)。
Thorough(全面的)。
Repeatable(可重复的)。
Independent(独立的)。
Professional(专业的)。
CORRECT边界条件
一致性(Conformance)--值是否符合预期的格式?
有序性(Ordering)--一组值是该有序的,还是该无序的?
区间性(Range)--值是否在一个合理的最大值和最小值的范围之内?
引用,耦合性(Reference)--代码是否引用了一些不受代码本身直接控制的外部因素?
存在性(Existence)--值是否存在(例如:非null,非零,包含于某个集合等)?
基数性(Cardinality)--是否恰好有足够的值?
时间性,绝对的或者相对的(Time)--所有事情是否都是按顺序发生的?是否在正确的时间?是否及时?
可以参见的网友文章,多谢文章作者。
【NUnit2.0详细使用方法】http://confach.cnblogs.com/archive/2005/06/20/177817.html
【NUnit 2.2.9中文文档】http://www.36sign.com/nunit/index.html
【单元测试之道读书笔记】http://www.cnblogs.com/blue.net/archive/2005/04/18/139775.html
VS2005的插件工具可以到 http://www.testdriven.net 下载
而即便是自己测试通过了,以后说不定还是会遇到这样那样没有预想到的问题,隐藏的bug很难挑,所以总觉得测试应该有什么规矩才可循才对。
所以最近找了本《单元测试之道 C#版》看一看,觉得挺好。记一下笔记,顺便搜罗一下网上的资源。
单元测试的概述
单元测试是开发编写的一小段代码,用于检测被测代码的一个很小的,很明确的功能是否正确。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
执行单元测试是了为证明某段代码的行为确实和开发者所期望的一致。
单元测试的目的是让你对你写的代码更有信心,让你的工作更有效率.
个人理解也就是 尽量保证自己写的每一个小功能都经过测试,都是正确的,这样才能避免乱七八糟的bug引入,使设计更合理。好像写测试浪费了一些编码时间,但实际上写测试的时间是把后期去bug的时间分散到编码阶段去做,总的来将可能还更省时间。好的代码应该是易于测试的,可以通过测试来改善设计。
NUnit的基本使用可以参考网友文章。
附上书后的总结
【注重实效的单元测试总结】
一般的原则:
测试任何可能失败的地方。
测试任何已经失败的地方。
对于新加的代码,在被证明正确之前,都可能是有问题的。
至少编写和产品代码一样多的测试代码。
针对每次编译都做局部测试。
签入代码之前做全局测试。
要回答的问题:
我如何知道代码运行是否正确呢?
我要如何对它进行测试?
还有哪些方面可能会发生错误?
这个问题是否会在其他的地方出现呢?
测试哪些方面:使用你的RIGHT-BICEP
结果是否正确(Right)?
边界(boundary)条件是否正确?
是否可以检查反向(inverse)关联?
是否可以使用其他方法来交叉检查(cross-check)结果?
错误条件(error condition)是否可以重现?
性能方面是否满足条件?
好的测试是A TRIP
Automatic(自动的)。
Thorough(全面的)。
Repeatable(可重复的)。
Independent(独立的)。
Professional(专业的)。
CORRECT边界条件
一致性(Conformance)--值是否符合预期的格式?
有序性(Ordering)--一组值是该有序的,还是该无序的?
区间性(Range)--值是否在一个合理的最大值和最小值的范围之内?
引用,耦合性(Reference)--代码是否引用了一些不受代码本身直接控制的外部因素?
存在性(Existence)--值是否存在(例如:非null,非零,包含于某个集合等)?
基数性(Cardinality)--是否恰好有足够的值?
时间性,绝对的或者相对的(Time)--所有事情是否都是按顺序发生的?是否在正确的时间?是否及时?
可以参见的网友文章,多谢文章作者。
【NUnit2.0详细使用方法】http://confach.cnblogs.com/archive/2005/06/20/177817.html
【NUnit 2.2.9中文文档】http://www.36sign.com/nunit/index.html
【单元测试之道读书笔记】http://www.cnblogs.com/blue.net/archive/2005/04/18/139775.html
VS2005的插件工具可以到 http://www.testdriven.net 下载