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