单元测试目的是为了保证代码按照程序员的预期运行,往往关注的是比其他测试更低的层次,从而确定代码的底层功能是否与期望一致。
  对于API框架而言,单元测试的一个重要优点在于测试在编译阶段引入了依赖关系,从而使之更容易确定代码的更改是否会影响API表示的契约。
  单元测试程序集与被测代码一般要分离开,这样可以保证在对应用程序代码进行部署时不包含单元测试,因为单元测试代码在产品环境中没有什么用。
  代码的独立单元测试越容易,越容易维护。
  所有测试都应该是自主的和独立的,且应该对期望行为和错误情况都进行测试。
  假设有以下内容需要被测:
1 namespace ExtendedMath
2 {
3     public static class Functions
4     {
5         public static int Fibonacci(int factor)
6         {
7             if (factor < 2)
8             {
9                 return (factor);
10             }
11             int x = Fibonacci(--factor);
12             int y = Fibonacci(--factor);
13             return x + y;
14         }
15     }
16 }
  接下来创建单元测试验证Fibonacci实现,只有包含在独立的test project项目中之后,单元测试才会被称为测试。
  创建一个单元测试项目,添加上述代码的命名空间引用,且在测试类上方添加引用:
  1 using ExtendedMath;
  2 using Microsoft.VisualStudio.TestTools.UnitTesting;
  为了使Visual Studio识别包含单元测试的类,必须给TestClass特性赋值,如果忘记添加TestClass特性,那么将找不到类中的单元测试方法。单元测试需要存放在公有的类中,因此一定要将类标记为public,单元测试方法必须是公有的和非静态的,而且没有参数和返回值,为了区别单元测试方法与普通方法,需要使用TestMethod特性。此时我们看到代码如下:
  1 namespace ExtendedMath
  2 {
  3     [TestClass]
  4     public class FunctionsTest
  5     {
  6         [TestMethod]
  7         public void FibonacciTest()
  8         {
  9         }
  10     }
  11 }