你应当拥有的8个PHP质量保证工具 — SitePoint

为了输出高质量的代码,我们必须在编码时时刻想着测试(如果没有进行测试驱动开发)。尽管有很多很多的PHP测试工具,可是太难做出选择了! 探索PHP是一个有趣的冒险过程 (高级课程在这里) 可是很难为此装配出一个工作时携带起来不那么笨重的工具带!

这篇文章将会着重介绍那些最受欢迎的测试工具,并且已经为反映2017年质量保证工具的发展状态更新了内容。

没测试的代码不是好代码。

实验室测试环境插图

PHPUnit

PHPUnit是一个针对PHP的测试框架。 Sebastian Bergmann在2004年创造了它,现在它的版本号已经到了6,需要PHP 7环境。

我们有很多关于它的教程, 这里有一些,不过你可能已经都看过了。

Cucumber

Cucumber 是一个从规格说明书创建验收测试用例的框架。它以能生成描述性的文本而著称,这些文本可以被当作简单的英语阅读。Cucumber官方的PHP实现是Behat

Behat logo

我们在SitePoint上有一篇关于它的入门教程。从文档中选取的下面的例子,就能很好的说明这些期望是多么的富有表现力。

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
      """

Atoum

Atoum logo

Atoum 是另一个针对PHP的单元测试框架。它是一个独立的软件包,你可以通过GitHub,Composer或者一个PHAR可执行文件安装它。

Atoum的测试代码可读性很高,它使用了表现力丰富的方法名并且使用链式表达。

$this->integer($classInstance->myMethod())
        ->isEqualTo(10);

$this->string($classInstance->myMethod())
        ->contains("Something heppened");

想学习更多关于使用Atoum对PHP做单元测试的内容的话,你可以看这篇教程

Selenium

Selenium 是一个用来进行浏览器自动化测试(集成和验收测试)的工具。它将测试用例转换为浏览器API命令,然后断言预期的结果。它支持现有的大部分浏览器。

我们可以把Selenium当作一个PHPUnit的扩展来使用。

composer require --dev phpunit/phpunit
composer require --dev phpunit/phpunit-selenium

这是个简单的例子:

class UserSubscriptionTest extends PHPUnit_Extensions_Selenium2TestCase
{
    public function testFormSubmissionWithUsername()
    {
        $this->byName('username')->value('name');
        $this->byId('subscriptionForm')->submit();
    }
}

如果你想学习更多,你可以看一下这篇文章 使用 PHPUnit 和 Selenium测试代码

Dusk

Laravel Dusk Logo

来自于Laravel的Dusk 是另一个浏览器自动化工具。它可以单独使用(通过 chromedriver) 也可以和Selenium一起使用。 它有一套简单易用的API,并且覆盖了所有可能遇到的测试情形,比如等待队列,文件上传,鼠标控制等等。下面是个简单的例子:

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');
        });
    }
}

你可以查看这篇教程来着手使用Dusk进行测试。

Kahlan

Kahlan logo

Kahlan是一个使用描述式语法的功能齐全的单元& BDD测试框架。

describe("Positive Expectation", function() {
    it("expects that 5 > 4", function() {
        expect(5)->toBeGreaterThan(4);
    });
});

你可以从上边的语法看出来它和Behat很相似。Kahlan 非常好的支持无依赖的stubbing和 mocking测试 , 以及代码覆盖率, 输出报告等功能.

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');
});

php_testability

这里我想提的最后一个软件包是 PHP Testability。它是一个静态分析工具,可以告诉你程序中可测试到的问题,并生成详细的报告。

这个软件包现在还没有一个可以信赖的标记发行版本,但你可以放心地在开发中使用它。 你可以通过Composer安装它:

`composer require edsonmedina/php_testability "dev-master"`

然后像这样运行:

`vendor/bin/testability . -x vendor`

Continuous integration (CI) Services

在代码被merge进项目的官方仓库之前进行自动化检查代码的能力,是团队协作时输出代码的重要组成部分。大部分可用的持续集成(CI)服务或工具都提供了在不同的平台和配置下测试代码的能力,以确保你的代码可以被安全的merge。
Thumbs up and down in one

有很多定价合理的服务供选择,不过你一样也可以使用开源工具:

结论

接受测试文化很难,但是它依然在实践中缓慢发展。如果你在意你的代码,你应该对他们进行测试!上边这些工具和资源可以帮助你快速开始。

关于使用上边提到的工具你有些什么经验?我们有没有漏掉些什么?告诉我们,我们将会尽力扩展这个必备工具清单!

原文链接 https://www.sitepoint.com/8-must-have-php-quality-assurance-tools/

阅读更多
换一批

没有更多推荐了,返回首页