TDD的一个简单例子
from:来源
如果你懒得去看那些很长很长的例子,不妨看看下面这个小例子,这个例子能让你对测试驱动开发有一个直观的了解. 
最起码让你知道测试驱动开发是一种开发技术而不是一项测试的技术  
 
Fibonacci 数列,呵呵可能有不少人都忘了怎么编的了吧,那正好带你看看tdd的威力 
 
测试驱动开发,那么测试先行是必然的了. 
第一个测试来了 
 public void testFibonacci()//不要以为这是junit,nunit也可以这样写,而不是非要用属性哦,不信你试试
public void testFibonacci()//不要以为这是junit,nunit也可以这样写,而不是非要用属性哦,不信你试试  {
{  AssertEquals(0,Fib(0));
  AssertEquals(0,Fib(0));  }
} 
Fibonacci 数列的第一个数是0,人人都知吧,好了现在测试代码有了,那么我们先运行一下测试吧. 
失败,报错,可恶的red进度条. 
显然,因为我们还甚至还没有Fib()这个函数呢. 
那么让我们赶紧让这个测试通过吧. 
 int Fib(int n)
int Fib(int n)  {
{  return 0;
 return 0;  }
} 
ok!!!  green  这将是你在tdd中最喜欢看到的颜色(多看绿色对我们的视力也是好事 )
) 
第二个测试 
 public void testFibonacci()
public void testFibonacci()  {
{  AssertEquals(0,Fib(0));
  AssertEquals(0,Fib(0));  AssertEquals(1,Fib(1));
  AssertEquals(1,Fib(1));  }
}  
 
那我们赶紧让它也通过吧 
 int Fib(int n)
int Fib(int n)  {
{  if(n==0) return 0;
  if(n==0) return 0;  return 1;
  return 1;  }
} 
通过了! 
从测试代码中我们看到了 
AssertEquals(0,Fib(0)); 
AssertEquals(1,Fib(1)); 
重复!不仅在源代码,就是在测试代码中,我们也要避免重复!!(测试代码中也会出现模式哦~~)
这里,我们用一个最简单的方法避免重复,用表驱动.
我们开始改写测试代码. 
 public void testFibonacci
public void testFibonacci  {
{  int cases[][]={{0,0},{1,1},{2,1}};
  int cases[][]={{0,0},{1,1},{2,1}};  for(int i=0; i<case.Length;i++)
  for(int i=0; i<case.Length;i++)  AssertEquals(case[i][1],fib[i][0]));
  AssertEquals(case[i][1],fib[i][0]));  }
 } 
这样添加测试代码就容易多了. 
测试代码改过了!!!小心哦,让我们再运行下,哦还能通过,那我们就可以放心继续了. 
 public void testFibonacci
public void testFibonacci  {
{  int cases[][]={{0,0},{1,1},{2,1},{3,2}};
  int cases[][]={{0,0},{1,1},{2,1},{3,2}};  for(int i=0; i<case.Length;i++)
  for(int i=0; i<case.Length;i++)  AssertEquals(case[i][1],fib[i][0]));
  AssertEquals(case[i][1],fib[i][0]));  }
 } 
oh! 失败了,赶快解决它 
 int Fib(int n)
int Fib(int n)  {
{  if(n==0) return 0;
 if(n==0) return 0;  if(n<=2) return 1;
 if(n<=2) return 1;  return 2;
 return 2;  }
} 
哦,%
 
                     
                    
                 
                    
                

 
   
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号