单元测试之道读书笔记(二)
编写单元测试要点:
1.引用NUnit.DLL
2.using NUnit.Framework
3.声明Public类, 测试类添加[TestFixture]属性,此类必须有一个public的、没有参数的构造函数(默认构造函数就行)
4.测试方法必须添加[Test]属性,测试方法必须是Public 没有返回类型(Void)
CateGory:
单元测试中有个很好的东西,那就是分类(CateGory),Category可以将你想要测试的方法或者测试类组织到自定义的分类中,当运行此分类时便可以自动的执行依据包含的测试类和测试方法,当然它也可以排除自动执行某些分类,使用Explicit=true属性来指定是否自动执行,当未指定Category时,则只运行Explicit=false(默认情况为false)的分类。
测试之前和测试之后:
每个单元测试都可以独立的执行,这样互不干扰其他测试,在每个测试之前,都需要设置某些测试环境,测试完成后,需要清理或者是否某些资源,这里有个不错的东西[SetUp]和[TearDown]属性,每次执行[Test]方法时会先调用[SetUp]方法,执行完成后会调用[TearDown]方法,有了这两个属性就可以将比如数据库链接和数据库释放的工作放到对应的方法中了,省的每个单元测试都写重复的代码。当然,这两个属性是针对测试方法的,同样也可以为测试类指定[TestFixtrueSetUp]和[TestFixtrueTearDown]。它们的原理同每个方法的[SetUp]和[TearDown]一样。
自定义断言:
当然,在编写单元测试的时候,谁也不想重复的拷贝和粘贴自己的一段一段的测试代码,那样的话到了测试后期估计得崩溃了!这里可以自定义断言,将公共的测试方法提取,在其他的测试方法中调用,同我们编码一样,没什么不同。
ExceptedException
NUnit还提供了[ExceptedException]属性,这样可以确定特定的代码是否像我们期望的一样引发了异常。
Ignore
[Ignore]属性,可以让测试时跳过某些还没有写好的测试方法或者测试类,等机会合适了在返回来完善测试方法和测试类。
其他
一个程序集(assembly)可以有多个testfixture,一个testfixture可以有一个或多个测试方法,一个测试方法可以有多个断言。
一个testsuite是一些TestFixture类的集合,任何一个测试类都可以包含一个用[Suite]标记的静态方法,这个方法将返回一个TestSuite,它就是一个TextFixture类集合。