本书未发布

测试

未匹配的标注

为了开发一个健壮的扩展包,对所提供的代码进行测试覆盖非常重要。 不仅要确认现有代码的正确行为,还要在添加新功能时验证一切仍然正常工作。 这确保了我们的扩展包可以在以后的阶段有把握地进行重构。

测试还允许其他开发人员了解如何使用扩展包的某些特性,并使他们对扩展包的可靠性有信心。

安装 PHPUnit

在 PHP 中有许多测试行为的选项,但是我们将使用非常好的工具 PHPunit 来接近 Laravel 的默认设置。

在我们的扩展包中将 PHPUnit 安装为开发依赖:

composer require --dev phpunit/phpunit

注意: 如果你正在为老版本的 Laravel 开发扩展包,可能需要安装一个特定的版本。

要配置 PHPUnit,在扩展包的根目录中创建一个phpunit.xml文件。 然后,复制以下模板以使用 in-memory sqlite 数据库并启用彩色报告。

phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"
         backupGlobals="false"
         backupStaticAttributes="false"
         colors="true"
         verbose="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Test Suite">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist>
            <directory suffix=".php">src/</directory>
        </whitelist>
    </filter>
    <php>
        <env name="DB_CONNECTION" value="testing"/>
    </php>
</phpunit>

测试目录结构

为了适应特性和单元测试,创建一个包含 Unit 和 Feature 子目录和基本 TestCase.php 文件的 tests/ 目录。 结构如下:

- tests
  - Feature
  - Unit
  TestCase.php

TestCase.php 继承了 \Orchestra\Testbench\TestCase (参见下面的示例) ,并包含了与在每个测试执行之前设置 “world” 相关的任务。 在 TestCase 类中,我们将实现三个重要的设置方法:

  • getPackageProviders()
  • getEnvironmentSetUp()
  • setUp()

让我们逐一来看看这些方法。

setUp()

你可能已经在自己的测试中使用过此方法。 当你在以后的所有测试中需要某个模型时,常常使用它。 因此,可以将该模型的实例化提取到每次测试之前调用的 setUp ()方法。 在测试中,所需的模型可以从 Test 类实例变量检索到。 使用此方法时,不要忘记调用父类的setUp()方法(并确保返回 void)。


getEnvironmentSetUp()

正如 Orchestra Testbench 所建议的: “如果需要在应用程序启动过程的早期添加一些内容,你可以使用 getEnvironmentSetUp()方法”。 因此,我建议在 setUp() 方法之前调用它。


getPackageProviders()

顾名思义,我们可以在 getPackageProviders()方法中加载服务提供者。 我们将通过返回一个包含所有提供者的数组来实现这一点。 现在,我们将只包括特定于扩展包的扩展包提供程序,但是想象一下,如果扩展包使用 EventServiceProvider,我们也会在这里注册它。


在一个扩展包中,TestCase 将继承自 \Orchestra\Testbench\TestCase:

// 'tests/TestCase.php'
<?php

namespace JohnDoe\BlogPackage\Tests;

use JohnDoe\BlogPackage\BlogPackageServiceProvider;

class TestCase extends \Orchestra\Testbench\TestCase
{
  public function setUp(): void
  {
    parent::setUp();
    // additional setup
  }

  protected function getPackageProviders($app)
  {
    return [
      BlogPackageServiceProvider::class,
    ];
  }

  protected function getEnvironmentSetUp($app)
  {
    // perform environment setup
  }
}

在运行 PHPUnit 测试套件之前,我们首先需要将测试名称空间映射到 composer.json 文件中 "autoload-dev"(psr-4)键下的适当文件夹:

{
  ...,

  "autoload": {},

  "autoload-dev": {
      "psr-4": {
          "JohnDoe\\BlogPackage\\Tests\\": "tests"
      }
  }
}

最后,通过运行 composer dump-autoload 重新映射自动加载文件。

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

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel-package...

译文地址:https://learnku.com/docs/laravel-package...

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~