12. 测试

未匹配的标注

为 PHP 代码编写自动化测试被认为是一种最佳实践,可以帮助构建良好的应用程序。自动化测试是一个非常棒的工具,可以确保你的应用程序在进行更改或添加新功能时不会影响现有的功能,因此不应被忽视。

PHP 有几种不同类型的测试工具(或框架),使用了不同的方法 - 它们都试图避免手动测试,满足大型 QA 团队的需要,确保最近的变更不会破坏既有功能。

测试驱动开发

Wikipedia 上的定义:

测试驱动开发(TDD)是一个软件开发过程,以非常短的开发周期不断迭代:首先,开发者针对将要实现的功能或者新的方法,编写一个失败的自动化测试用例,然后生成代码以通过该测试,最后对新代码进行重构达到可接受的标准。肯特·贝克(Kent Beck)在 2003 年表示,TDD 鼓励简单的设计并激发自信。他被认为是这项技术的创始人,或者说是 “重新发现者” 。

你可以为应用程序执行的测试有下面这些不同类型:

单元测试

单元测试是一种编程方法,用于确保函数、类和方法在整个开发周期中都能按预期工作。通过检查各个函数和方法的输入输出,可以确保内部逻辑正常执行。通过使用依赖项注入和构建“模拟”类和 stubs,可以验证依赖项是否被正确地使用,提高了测试覆盖率。

当你创建一个类或函数时,需要为它应有的每个行为都创建一个单元测试。最起码的要求是,如果发送了错误的参数,应该确保它会触发错误,如果发送了有效的参数,你应该确保它是正常生效的。这将有助于确保在以后的开发周期中对这些类或函数进行更改时,旧功能仍能按预期工作。唯一可替代方法是在你的 test.php 文件中,使用 var_dump() 来测试,但别指望用这种方式来构建应用程序,无论规模大小。

单元测试的另一个用途是开源。如果你可以编写一个输出功能中断(即失败)的测试,然后修复它,并显示测试通过,那么补丁会更容易被接受。如果你在维护一个接受 pull request 的项目,那么应该建议将单元测试作为一项要求。

PHPUnit 是业界 PHP 应用程序编写单元测试标准的测试框架,但是也有其他几种可选的框架:

集成测试

Wikipedia 上的定义:

集成测试(有时称为集成和测试,缩写为 “I&T”)是软件测试中的一个阶段,将各个软件模块组合作为一个整体进行测试。它处于单元测试之后,验收测试之前。集成测试将经过单元测试的模块作为其输入,将其组合为更大的集合,运行集成测试用例,输出一个可以进行系统测试的集成系统。

许多相同的测试工具既可以运用到单元测试,也可以运用到集成测试,因为其中很多原理都相同。

功能性测试

有时候也被称之为验收测试,功能测试是通过使用工具来生成自动化的测试用例,而不是单元测试中简单的验证单个模块的正确性和集成测试中验证各个模块间交互的正确性。这些工具通常会使用真实数据来模拟真实用户的行为。

功能测试的工具

  • Selenium
  • Mink
  • Codeception 是一个全栈的测试框架包括验收性测试工具。
  • Storyplayer 是一个全栈的测试框架并且支持随时创建和销毁测试环境。

行为驱动开发

有两种不同的行为驱动开发 (BDD): SpecBDD 和 StoryBDD。 SpecBDD 专注于代码的技术行为,而 StoryBDD 专注于业务逻辑或功能的行为和互动。这两种 BDD 都有对应的 PHP 框架。

采用 StoryBDD 时, 你编写可读的故事来描述应用程序的行为。接着这些故事可以作为应用程序的实际测试案例执行。Behat 是使用在 PHP 应用程序中的 StoryBDD框架,它受到 Ruby 的 Cucumber 项目的启发并且实现了 Gherkin DSL 來描述功能的行为。

采用 SpecBDD 时, 你编写规格来描述实际的代码应该有什么行为。你应该描述函数或者方法应该有什么行为,而不是测试函数或者方法。PHP 提供了 PHPSpec 框架来达到这个目的,这个框架受到了 Ruby 的 RSpec project 项目的启发。

BDD 链接

  • Behat, PHP 的 StoryBDD 框架, 受到了 Ruby 的 Cucumber 项目启发;
  • PHPSpec, PHP 的 SpecBDD 框架, 受到了 Ruby 的 RSpec 项目启发;
  • Codeception 是一个遵循 BDD 准则的全栈测试框架。

其他测试工具

除了个别的测试驱动和行为驱动框架之外,还有一些通用的框架和辅助函数类库,对任何的测试方法都很有用。

测试工具链接

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
Summer
贡献者:4
讨论数量: 0
发起讨论 只看当前版本


暂无话题~