单元测试一直以来感觉很神秘。为什么要进行单元测试,到底什么才是正确的单元测试方法?单元测试和白盒测试有区别吗?
这些问题一直困扰着我,今天大概唠叨一下,个人的想法,不一定正确哦。
1.为什么要进行单元测试
单元测试可以测试一个小的单元(一个类或方法),确保这个单元是与预期相符的,这样就可以在更大级别的测试中尽量减少单元的问题的干扰,当软件发生bug时,就可以更快的定位到问题具体所在,解决bug。
2.首先闹明白什么是 单元测试:
假设我们生产电脑的一个零件,我们会考虑组成这个零件的每一个最小组部分成是否合格,是否符合我们的预期。为了达到这个目的我们会对这些最小部分进行测试,其实这就是单元测试。
而在我们软件里可以这样定义,单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,这个很小的可以是一个类或一个方法,通常,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。检查它是否符合我们的预期。
根本目的:检查在尽量多的情况下,单元的工作是否符合预期。
3.到底怎样进行单元测试呢
个人认为单元测试是在规模的角度看待的,而白盒测试是在测试方法进行分类的。按照规模测试应分为单元测试、功能测试、集成测试、整体测试。
在测试方法上测试又分为白盒测试和黑盒测试。单元测试可以使用白盒测试的技巧也可以不使用,目的是尽可能多的检验单元的正确性。
5.常用的测试框架
1)NUnit:目前最高版本为2.2.7(也是本文所使用的NUnit的版本)
下载地址:http://www.nunit.org
2)TestDriven.Net:一款把NUnit和VS IDE集成的插件
下载地址:http://www.testdriven.net/
3)NUnit2Report:和nant结合生成单元测试报告
下载地址:http://nunit2report.sourceforge.net
4)Rhino Mocks 2:个人认为时.net框架下最好的mocks库,而且支持.net 2.0, rocks~!
下载地址:http://www.ayende.com/projects/rhino-mocks.aspx
6.基于Visual Studio 的单元测试
1)NUnit提供了以下Attribute来支持测试函数的初始化:
TestFixtureSetup:在当前测试类中的所有测试函数运行前调用;
TestFixtureTearDown:在当前测试类的所有测试函数运行完毕后调用;
Setup:在当前测试类的每一个测试函数运行前调用;
TearDown:在当前测试类的每一个测试函数运行后调用。
这些属性可以典型用于数据库相关的例子。
还有category、suite等。
2)常使用断言Assert类,常用的NUnit断言有:
遇到无返回值的方法,可以构造值来进行判断。能 显示测试的报表,明显的显示bug的具体位置。
7.推荐文章
http://blog.csdn.net/fenghu89/archive/2008/05/04/2379128.aspx
http://www.cnblogs.com/chwkai/archive/2006/03/23/356326.html
http://www.uml.org.cn/Test/200604215.htm
这些问题一直困扰着我,今天大概唠叨一下,个人的想法,不一定正确哦。
1.为什么要进行单元测试
单元测试可以测试一个小的单元(一个类或方法),确保这个单元是与预期相符的,这样就可以在更大级别的测试中尽量减少单元的问题的干扰,当软件发生bug时,就可以更快的定位到问题具体所在,解决bug。
2.首先闹明白什么是 单元测试:
假设我们生产电脑的一个零件,我们会考虑组成这个零件的每一个最小组部分成是否合格,是否符合我们的预期。为了达到这个目的我们会对这些最小部分进行测试,其实这就是单元测试。
而在我们软件里可以这样定义,单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,这个很小的可以是一个类或一个方法,通常,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。检查它是否符合我们的预期。
根本目的:检查在尽量多的情况下,单元的工作是否符合预期。
3.到底怎样进行单元测试呢
1)准备测试所需要的各种条件(创建所有必须的对象,分配必要的资源等)
包括各种有代表性的合法测试数据,可以使用边界值法,还可以使用各种非法数据,检查是否抛出指定的异常。
2)调用要测试的方法。
3)验证被测试的方法的行为和期望是否和我们的一致。
4)完成后清理各种资源
4.单元测试和白盒测试的关系个人认为单元测试是在规模的角度看待的,而白盒测试是在测试方法进行分类的。按照规模测试应分为单元测试、功能测试、集成测试、整体测试。
在测试方法上测试又分为白盒测试和黑盒测试。单元测试可以使用白盒测试的技巧也可以不使用,目的是尽可能多的检验单元的正确性。
5.常用的测试框架
1)NUnit:目前最高版本为2.2.7(也是本文所使用的NUnit的版本)
下载地址:http://www.nunit.org
2)TestDriven.Net:一款把NUnit和VS IDE集成的插件
下载地址:http://www.testdriven.net/
3)NUnit2Report:和nant结合生成单元测试报告
下载地址:http://nunit2report.sourceforge.net
4)Rhino Mocks 2:个人认为时.net框架下最好的mocks库,而且支持.net 2.0, rocks~!
下载地址:http://www.ayende.com/projects/rhino-mocks.aspx
6.基于Visual Studio 的单元测试
1)NUnit提供了以下Attribute来支持测试函数的初始化:
TestFixtureSetup:在当前测试类中的所有测试函数运行前调用;
TestFixtureTearDown:在当前测试类的所有测试函数运行完毕后调用;
Setup:在当前测试类的每一个测试函数运行前调用;
TearDown:在当前测试类的每一个测试函数运行后调用。
这些属性可以典型用于数据库相关的例子。
还有category、suite等。
2)常使用断言Assert类,常用的NUnit断言有:
method | usage | example |
Assert.AreEqual(object expected, object actual[, string message]) | 验证两个对象是否相等 | Assert.AreEqual(2, 1+1) |
Assert.AreSame(object expected, object actual[, string message]) | 验证两个引用是否指向同意对象 | object expected = new object(); object actual = expected; Assert.AreSame(expected, actual) |
Assert.IsFalse(bool) | 验证bool值是否为false | Assert.IsFalse(false) |
Assert.IsTrue(bool) | 验证bool值是否为true | Assert.IsTrue(true) |
Assert.IsNotNull(object) | 验证对象是否不为null | Assert.IsNotNull(new object()) |
Assert.IsNull(object) | 验证对象是否为null | Assert.IsNull(null); |
7.推荐文章
http://blog.csdn.net/fenghu89/archive/2008/05/04/2379128.aspx
http://www.cnblogs.com/chwkai/archive/2006/03/23/356326.html
http://www.uml.org.cn/Test/200604215.htm