介绍 Laravel 天生就具有测试的基因。事实上,Laravel 默认就支持用 PHPUnit 来做测试,并为你的应用程序配置好了 phpunit.xml 文件。框架还提供了一些便利的辅助函数,让你可以更直观的测试你的应用程序。 默认情况,你的应用 tests 目录中包含两个子目录:Feature 和 Unit。单元测试是针对你的代码中非常少,而且相对独立的一部分代码来进行的测试。实际上,大部分单元测试都是针对单个方法进行的。功能测试是针对大面积代码进行的测试,包括多个对象之间的交互,甚至是对 JSON 端点的完整 HTTP 请求。 Feature 和 Unit 目录中都提供一个 ExampleTest.php 测试示例文件。安装一个新的 Laravel 应用程序之后,在命令行下运行 phpunit 命令,即可运行测试。 环境 在使用 phpunit 进行测试时,Laravel 将根据 phpunit.xml 文件设定的环境变量自动将环境设置为 testing,并将 Session 及缓存以 array 的形式存储,也就是说在测试时不会持久化任何 Session 或缓存数据。 你可以随意创建其它必要的测试环境配置。testing 环境变量可以在 phpunit.xml 文件中修改,但是在运行测试之前,请确保使用 config:clear Artisan 命令来清除配置信息的缓存! 此外,你还可以在你的项目根目录下创建一个 .env.testing 文件,在运行单元测试或使用带有 --env=testing 选项的 Artisan 命令时, .env 文件中的变量会被这个文件覆盖。 创建并运行测试 可以使用 Artisan 命令 make:test 创建一个新的测试用例: ``` // 在 Feature 目录下创建一个测试类... php artisan make:test UserTest // 在 Unit 目录下创建一个测试类... php artisan make:test UserTest --unit ``` 技巧:可以使用 stub publishing 自定义测试 stub 测试类一旦生成,你就可以像使用 PHPUnit 一样定义测试方法。 执行 phpunit 或者 php artisan test 命令即可执行测试: ``` <?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase { /** * 一个基础的测试示例。 * * @return void */ public function testBasicTest() { $this->assertTrue(true); } } ``` 注意:如果要在你的测试类中定义自己的 setUp / tearDown 方法,请确保调用了父类中的 parent::setUp() / parent::tearDown() 方法。 Artisan 测试运行器 除 phpunit 命令之外, 您还可以使用 Artisan 的 test 命令来运行你的测试。Artisan 测试运行器提供了关于当前正在运行的测试的更多信息,以便于日常开发与调试: ``` php artisan test ``` 任何可以传递给 phpunit 命令的参数也可以传递给 Artisan 的 test 命令: ``` php artisan test --testsuite=Feature --stop-on-failure ```