测试:入门指南
介绍
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
Tip:可以使用 stub publishing 自定义测试 stub
测试类生成之后,你就可以像平常使用 PHPUnit 一样来定义测试方法。要运行测试只需要在终端上运行 phpunit
命令即可:
<?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
命令之外,您还可以使用 test
Artisan 命令来运行你的测试。Artisan 测试运行器提供了关于当前正在运行的测试的更多信息,并将在第一次测试失败时自动停止:
php artisan test
任何可以传递给 phpunit
命令的参数也可以传递给 Artisan test
命令:
php artisan test --group=feature