单元测试目的是为了保证代码按照程序员的预期运行,往往关注的是比其他测试更低的层次,从而确定代码的底层功能是否与期望一致。
对于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 }