PHP 质量保证工具概述:提升 PHP 代码质量的实用指南
本文重点介绍 PHPUnit、Cucumber、Atoum、Selenium、Dusk、Kahlan 和 PHP Testability 等关键 PHP 质量保证工具,它们各自提供独特的测试和代码质量改进功能。此外,持续集成 (CI) 服务(如 PHPCI、TravisCI、SemaphoreCI 和 Jenkins)对于团队项目至关重要,因为它们会在代码合并到官方项目存储库之前自动检查代码。
虽然建立测试文化具有挑战性,但对于代码质量至关重要。使用上述工具可以帮助开发人员开始进行测试,并确保其 PHP 编码实践的质量。
(此热门文章已于 2017 年 6 月 30 日更新,以包含最新的技术和工具。)
为了交付高质量的代码,我们必须在编码时(如果不是进行测试驱动开发 (TDD) 的话)考虑到测试。然而,鉴于 PHP 测试工具种类繁多,很难做出选择!探索 PHP 是一次有趣的冒险,但要组建一个不会过于繁重的工具箱却很难!
这篇文章将重点介绍最流行的测试工具,并已更新以反映 2017 年质量保证工具的现状。
未经测试的代码就是有问题的代码。
PHPUnit 是 PHP 的首选测试框架。它由 Sebastian Bergmann 于 2004 年创建,当前版本为 6,需要 PHP 7。
我们有很多关于它的教程即将推出。
Cucumber 是一个用于根据规范创建验收测试的框架。它以其描述性生成的文本而闻名,这些文本可以像普通的英语一样阅读。Cucumber 的官方 PHP 实现是 Behat。
我们在这里的 SitePoint 上有一个关于它的入门教程。以下摘自文档的示例很好地说明了这些期望的表达方式。
<code>Feature: Listing command In order to change the structure of the folder I am currently in As a UNIX user I need to be able see the currently available files and folders there Scenario: Listing two files in a directory Given I am in a directory "test" And I have a file named "foo" And I have a file named "bar" When I run "ls" Then I should get: """ bar foo """</code>
Atoum 是另一个用于 PHP 的单元测试框架。它是一个独立的包,您可以通过 GitHub、Composer 或 PHAR 可执行文件安装。
Atoum 测试具有非常高的可读性,方法名称和链接表达清晰。
<code>$this->integer($classInstance->myMethod()) ->isEqualTo(10); $this->string($classInstance->myMethod()) ->contains("Something heppened"); </code>
如果您想了解有关使用 Atoum 进行 PHP 单元测试的更多信息,可以阅读本教程。
Selenium 是一个用于自动化浏览器测试(集成和验收测试)的工具。它将测试转换为浏览器 API 命令,并断言预期结果。它支持大多数可用的浏览器。
我们可以使用扩展程序将 Selenium 与 PHPUnit 配合使用。
<code>Feature: Listing command In order to change the structure of the folder I am currently in As a UNIX user I need to be able see the currently available files and folders there Scenario: Listing two files in a directory Given I am in a directory "test" And I have a file named "foo" And I have a file named "bar" When I run "ls" Then I should get: """ bar foo """</code>
这是一个简单的示例:
<code>$this->integer($classInstance->myMethod()) ->isEqualTo(10); $this->string($classInstance->myMethod()) ->contains("Something heppened"); </code>
如果您想了解有关使用 PHPUnit 和 Selenium 进行测试的更多信息,可以阅读本系列文章。
Laravel 的 Dusk 是另一个浏览器自动化工具。它可以独立使用(使用 chromedriver)或与 Selenium 配合使用。它具有易于使用的 API,涵盖了所有测试可能性,例如等待元素、文件上传、鼠标控制等。这是一个简单的示例:
<code>composer require --dev phpunit/phpunit composer require --dev phpunit/phpunit-selenium </code>
您可以查看本教程以开始使用 Dusk 进行测试。
Kahlan 是一个功能齐全的单元和 BDD 测试框架,它使用 describe-it 语法。
<code>class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase { public function testFormSubmissionWithUsername() { $this->byName('username')->value('name'); $this->byId('subscriptionForm')->submit(); } } </code>
从上面的语法可以看出,它类似于 Behat 测试。Kahlan 支持开箱即用的存根和模拟,无需依赖项、代码覆盖率、报告等。
<code>class LanguagesControllerTest extends DuskTestCase { public function testCreate() { $this->browse(function (Browser $browser) { $user = $this->getAdminUser(); $browser->loginAs($user) ->visit('/panel/core/languages') ->click('#add') ->assertPathIs('/panel/core/languages/create') ->type('name', 'Arabic') ->select('direction', 'rtl') ->press('Submit') ->assertSee('Language: Arabic') ->assertSee('ar') ->assertSee('rtl') ->assertSee('Language created'); }); } } </code>
最后要提到的一个包是 PHP Testability。它是一个静态分析工具,可以告诉您程序中的可测试性问题,并生成详细的报告。
该包目前没有您可以依赖的标记版本,但您可以在开发中安全地使用它。您可以通过 Composer 安装它:
<code>describe("Positive Expectation", function() { it("expects that 5 > 4", function() { expect(5)->toBeGreaterThan(4); }); }); </code>
然后像这样运行它:
<code>it("makes a instance double with a parent class", function() { $double = Double::instance(['extends' => 'Kahlan\Util\Text']); expect(is_object($double))->toBe(true); expect(get_parent_class($double))->toBe('Kahlan\Util\Text'); }); </code>
在与团队合作交付代码时,一个重要部分是在将代码合并到项目的官方存储库之前自动检查代码的能力。大多数可用的 CI 服务/工具都能够在不同的平台和配置上测试代码,以确保您的代码可以安全地合并。
有很多服务提供良好的价格等级,但您也可以使用开源工具:
建立测试文化很难,但它会随着实践而缓慢增长。如果您关心您的代码,您应该测试它!上述工具和资源将帮助您快速入门。
您对上述工具的经验如何?我们是否遗漏了什么?请告诉我们,我们将尽最大努力用必要的工具扩展列表!
选择 PHP 质量保证工具时,需要考虑几个关键功能。首先,该工具应该能够执行静态代码分析,这涉及检查源代码中是否存在潜在的错误、bug 或违反编码标准的情况,而无需执行程序。其次,该工具应该提供单元测试框架,允许您测试源代码的各个单元,以确定它们是否适合使用。其他重要功能包括代码覆盖率分析(衡量代码测试的程度)和持续集成(定期将所有开发人员的工作副本合并到共享主线上)。
PHP 质量保证工具可以通过自动化许多原本耗时且容易出错的任务来显着提高开发过程的效率。例如,静态代码分析可以自动检测潜在的错误和违反编码标准的情况,从而免除了您手动检查代码的麻烦。同样,单元测试框架可以自动测试源代码的各个单元,确保它们在集成到更大的系统之前能够正常运行。这可以节省您大量用于调试和故障排除的时间和精力。
是的,有很多可用的开源 PHP 质量保证工具。其中包括 PHP_CodeSniffer(检查代码中是否存在违反编码标准的情况);PHPUnit(单元测试框架);以及 PHPMD(查找代码中存在的潜在问题,例如 bug、次优代码和过于复杂的表达式)。这些工具免费使用,并且可以根据您的特定需求进行定制。
(以下 FAQ 答案类似地改写,保持原文意思不变,并调整语言风格,使之更流畅自然。)
以上是8必须具有PHP质量保证工具的详细内容。更多信息请关注PHP中文网其他相关文章!