测试:入门指南

介绍

Laravel 天生就具有测试的基因。事实上,Laravel 默认就支持用 PHPUnit 来做测试,并为你的应用程序配置好了 phpunit.xml 文件。框架还提供了一些便利的辅助函数,让你可以更直观的测试你的应用程序。

默认情况,你的应用 tests 目录中包含两个子目录:FeatureUnit。单元测试是针对你的代码中非常少,而且相对独立的一部分代码来进行的测试。实际上,大部分单元测试都是针对单个方法进行的。功能测试是针对大面积代码进行的测试,包括多个对象之间的交互,甚至是对 JSON 端点的完整 HTTP 请求。

FeatureUnit 目录中都提供一个 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 创建一个新的测试用例:

  1. // 在 Feature 目录下创建一个测试类...
  2. php artisan make:test UserTest
  3. // 在 Unit 目录下创建一个测试类...
  4. php artisan make:test UserTest --unit

Tip:可以使用 stub publishing 自定义测试 stub

测试类生成之后,你就可以像平常使用 PHPUnit 一样来定义测试方法。要运行测试只需要在终端上运行 phpunit 命令即可:

  1. <?php
  2. namespace Tests\Unit;
  3. use PHPUnit\Framework\TestCase;
  4. class ExampleTest extends TestCase
  5. {
  6. /**
  7. * 一个基本的测试示例
  8. *
  9. * @return void
  10. */
  11. public function testBasicTest()
  12. {
  13. $this->assertTrue(true);
  14. }
  15. }

注意:如果要在你的测试类中定义自己的 setUp / tearDown 方法,请确保调用了父类中的 parent::setUp() / parent::tearDown() 方法。

Artisan 测试运行器

除了 phpunit 命令之外,您还可以使用 test Artisan 命令来运行你的测试。Artisan 测试运行器提供了关于当前正在运行的测试的更多信息,并将在第一次测试失败时自动停止:

  1. php artisan test

任何可以传递给 phpunit 命令的参数也可以传递给 Artisan test 命令:

  1. php artisan test --group=feature

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

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

Laravel China 社区:https://learnku.com/docs/laravel/7.x/testing/7505