欢迎来到天天文库
浏览记录
ID:37938124
大小:205.64 KB
页数:28页
时间:2019-06-03
《第15章 单元测试和功能测试》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第15章单元测试和功能测试自从有了面向对象的程序设计方法,自动化测试也迅速发展。特别是在开发web应用程序时,即使应用程序非常复杂,测试自动化也能保证程序的质量。symfony提供了多种工具来实现测试自动化,本章将介绍这些方法。测试自动化任何有经验的web应用程序开发者都很在意要花多少时间来进行完备的测试。准备并运行测试案例然后分析测试结果是非常费时的工作。而且,web应用的需求经常变动,因而一个应用会有一连串的版本,代码重构成为常事,错误因此不断地产生。因而,虽然一个开发环境并不一定要有测试自动化,但是成功的开发环境还是应该包括测试自动化的。一组测试用例可以确保应用程序按
2、照预计的去执行。尽管经常会重新设计程序内部结构,但是测试自动化可以防止重复犯错。而且,测试自动化会要求开发者用测试框架能理解的方式,去书写标准化了的、固定格式的测试用例。因为测试自动化能清晰地描述一个应用程序能做些什么,因而有时侯它可以替代开发文档。一个好的测试包可以揭示出在一组测试输入下应该得到哪些输出结果,因而可以很好地解释一个方法的运行目标。symfony框架本身就采用了测试自动化方法。框架内部由测试自动化进行验证,这些单元测试和功能测试并不随symfony一起发布,但你可以从SVN库导出或从网站http://www.symfony-project.com/trac/
3、browser/trunk/test得到。单元测试和功能测试单元测试检测一个单元的代码,以确定对于一个给定的输入,它能否得到正确的输出结果。对每个具体的测试用例,它可以验证函数或方法是否能正确执行。一次单元测试处理一个用例,所以如果一个方法在不同的情况下运行,就需要进行多次单元测试。功能测试不是简单地测试输入输出间的转化是否正确,而是针对一个完整的功能特性。例如,一个缓存系统只能用一个功能测试去验证,因为它包括多个运行步骤。第一次请求一个页面时,产生缓存数据,第二次再请求页面时,页面就直接从缓存中取出。所以,功能测试可以验证一个运行过程,同时也需要一个运行环境,你可以用sy
4、mfony为你的每一个动作写出功能测试代码。对于最复杂的交互,只有这两种测试是不够的。比如说ajax交互,就需要一个web浏览器来执行javascript,所以要自动测试还需要一个特殊的第三方工具。更进一步的例子是视觉效果测试,它只能由人亲自去完成。如果你有多种测试自动化的方法,你可能组合使用这些方法。有一个原则,你应该尽量让测试简单而且易于理解。NOTE测试自动化将测试结果和预期输出进行比较,也就是说,它会计算一个象$a==2这样的断言(assertion)的值。断言的结果要么是真要么是假,对应着测试通过或失败。在测试自动化技术中,经常会用到断言这个词。测试驱动的开发方法
5、在测试驱动的开发(TDD)方法中,编码之前就写好了测试用例。先写测试用例可以帮助你在真正开发一个功能之前明确一个功能会完成什么任务。象极限编程(XP)之类的开发方法也建议这样做。而且一个不可否认的事实是:如果你不事先写好单元测试用例,你将再也写不出来。例如,你如果想写一个文本删节的功能,目的是将字符串开头和末尾的空格清除,用下划线替代非字母字符,并将所有大写字母转换成小写字母。在测试驱动的开发方法中,你要考虑到所有可能出现的情况,并对每种情况提供一个输入和预期输出的实例,如表15-1所示。表15-1一个文本删节功能的测试用例表输入预期输出"foo""foo""foobar"
6、"foo_bar""-)foo:..=bar?""__foo____bar_""FooBar""foobar""Don'tfoo-barme!""don_t_foo_bar_me_"你要写出单元测试用例,运行这些测试用例,然后看结果是否正确。你要在代码中添加一些内容来处理第一个测试用例,运行看是否通过,再处理第二个测试用例,一直到所有测试用例都通过了,表明功能正确了。采用驱动测试的开发方法设计的应用程序,测试代码几乎和实际代码一样多。如果你不想在调试测试用例方面花费太多时间,你应该尽力保持测试用例简单。NOTE重构一个方法会产生之前没有的错误。所以在将一个新版应用程序部署到
7、生产环境去之前,应该运行所有的自动化测试代码——这个过程叫做回归测试。lime测试框架PHP开发领域有许多单元测试框架,最著名的应该是PhpUnit和SimpleTest。Symfonysymfony采用自己的测试框架,叫做lime,它基于Test::MorePerl库,并且遵守TAP规则,也就是说,测试结果按照TestAnythingProtocol(译者注:一种测试输出的格式标准,见本章的示例)规定的格式显示,这样有助于理解测试的输出结果。Lime用于单元测试,它是比较轻量级的php测试框架,并有以下一些特点:
此文档下载收益归作者所有