http://172.17.205.16:8888/FitNesse.UserGuide.AcceptanceTests
自动化的验收测试:构建正确的代码
FitNesse自动化验收测试是能够定位残缺需求的强大工具。熟练的应用FitNesse的自动化测试,能够避免在ProjectDeathByRequirements里提到过的问题。(注意:如果你还不了解,你应当去读下TwoMinuteExample章节。)
FitNesse测试的优点
FitNesse自动化验收测试相比于其他很多传统意义上的黑盒和基于GUI的功能测试而言有下面的优点:
FitNesse测试能够为我们项目里所做的特性带来更早的反馈。事实上,测试应该先行,然后程序员为这些测试写代码。
FitNesse测试能够为我们带来更加频繁的反馈。这些测试通过FitNesse的B/S架构更加频繁的被手动或自动的运行。每周,每天,每时…
FitNesse测试是可判定的:不是对的就是错的。如果一个需求运行成功并且该需求被做完,我们可以进行下一个需求点。如果测试集运行的并不很准确,我们将重新定义它们。这样,我们就不断的以一种正确的方式定位着我们的系统。当每个新加入的测试运行正确,我们会发现系统变的越来越好,越来越有价值,离我们想要的越来越近。
基于示例数据,FitNesse测试跑了更多的路径,尝试了更多的业务逻辑。当你使用FitNesse后,你会发现丢失系统特性及函数行为的错误越来越少。
验收测试VS单元测试
如果你已经很熟悉自动化单元测试里的xUnit系列(例如,Java的JUnit,C#里的NUnit),你应该非常想知道为什么各种测试都是需要的,以及怎样让它们配合起来工作。现在让我们来讨论下这个问题。
xUnit:让代码构建成功
自动化单元测试(也被称为程序员测试),是白盒测试,它验证的是低级别的行为。特别在测试先行的开发方式中,程序员依靠这样的测试来验证设计是可靠的,它们是没有缺陷的。这些测试主要为程序员工作,也由程序员自己负责,它们有着独立的函数性。
如果一个团队使用JUnit或者NUnit来实践测试驱动开发,他们仍然会被残缺的需求伤害,他们最终会做出非常优异的,但却没有任何商业价值的代码(事实上这种情况在商业开发中经常出现)。
FitNesse:构建正确的代码
FitNesse自动化测试一开始就是为了构建正确的代码:真正的具有商业价值的代码。程序员专心于写FitNesse测试,但这些测试不仅仅是为了程序员,它更是为了用户,商业分析家,测试专家,支持者,管理人员以及那些投资者。
“运行吧,可以测试的特性”
Ron Jeffries阐述的最高级别的软件工程规则中,关于投资回报率的,就是运行可以测试的特性。在上一轮迭代、或上一个月、或者上一个版本我们写了相关的文档那个?我们只要在FitNesse里面看下就能知道答案。
在自动化验收测试中,如果不使用固定的工具,我们不可能知道在单元时间内我们产出了多少文档,很显然,我们不能知道我们项目的投资回报率是多少。当然你的团队读过了ProjectDeathByRequirements。
考虑使用两种工具
如果你仅使用FitNesse,却不使用单元测试来实践测试驱动或者重构代码的话,你的代码可能充满了错误。即使短期内没有出现严重的问题;那从第三版到第一版本都是一种牺牲。你不得不去保持代码的简练及可扩展性来防止代码晦涩难懂。 另外的方面,你的代码在不断的重新中变的一文不值。
同时使用两种工具,你可以在你的产品及产品能力间保持平衡。你可以给予你的特性有最高的投资回报率,同时让你的代码干净整洁、健壮和良好的可扩展性。你会发现自己迷恋于自动化测试所提供的较早的、较频繁的反馈。你整个团队也会迷恋于构建正确的代码,让构建的代码正确的过程。
总结
FitNesse自动化验收测试相较于传统的功能测试有很多优势。这些优势能够保证对需求的管理及系统特性的验证。
只有像FitNesse这样的自动化验收测试才能够保证你去计算可测试的特性,而这种计算能够控制项目过程及保证项目成功。
FitNesse自动化验收测试是单元测试的一个完美补充。单元测试保证你写的代码无错,而FitNesse保证你的代码确实是有价值的代码。大家把两种工具都是用起来吧。
更多可以学习的内容
如果你还没开始实践FitNesse,从TwoMinuteExample开始吧。至于怎么让团队一起是用FitNesse来做出更好的系统,请阅读DeliveringTheRightSystem。
如果你已经准备好开始写FitNesse页面及测试表了,读读EditingFitnessePages和CreatingTestTables。