phpunit 学习
单元测试是一个强大的功能,之前一直不会今日学习了一下,由于还在学习可能还存在问题。
首先,需要先进行phpuit的安装,正常情况下安装好laravel之后是已经安装该扩展。
安装
phpunit安装
composer require --dev phpunit/phpunit
这样就安装好测试扩展了
编写测试案列
测试代码的生成
在test文件夹下面包含了两个文件Feature和Unit,这两个文件夹有什么区别呢?Feature更多的是对整个对象或者完整的一个http请求进行测试,而Unit更多是对单个方法进行测试。
// 在 Feature 目录下创建一个用户接口的测试类...
php artisan make:test UserApiTest
测试内容的编写
创建好之后进行相关代码的编写,我是对用户数据获取的接口进行测试
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\Models\User;
class UserApiTest extends TestCase
{
use RefreshDatabase;
protected $user;
protected function setUp(): void
{
parent::setUp();
$this->createUser();
}
/**
* A basic feature test example.
*
* @return void
*/
public function testExample()
{
$token = $this->user->createNewToken();
$response = $this->withHeaders(['Authorization' => 'Bearer '.$token])->get('/api/user');
$response->assertStatus(200);
}
public function createUser()
{
$user = factory(User::class)->create();
$this->user = $user;
}
}
createNewToken就是生成当前用户token,具体方法按照各自的逻辑编写即可
代码流程:
- 我先生成了一条用户数据。
- 然后拿生成的用户进行token的换取。
- 最后将token附加到http请求的header头中。
进行测试
测试方案
我的phpunit在vender/bin/phpunit之中
//1、使用此命令会对所有测试案列进行测试
./vendor/bin/phpunit
//2、使用此命令会只对UserApiTest类中的方法进行测试
./vendor/bin/phpunit /var/www/project/tests/Feature/UserApiTest.php
//3、使用此命令会只对UserApiTest类中的testExample方法进行测试
./vendor/bin/phpunit --filter testExample /var/www/project/tests/Feature/UserApiTest.php
错误解决
发现有报错
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 no such table: users (SQL: select * from "users" where "users"."id" = 2 limit 1)
后来发现需要使用use RefreshDatabase
引入这个trait就可以了,主要是刷新一下数据表
测试结果
终于测试成功了。
总结
单元测试是一个很强大的功能,当你为自己的项目编写单元测试,之后进行代码修改或新增时候就可以使用一条命令可以看出当前代码是否存在问题,同时还可以看出对之前编写的代码是否产生影响,从而可以保证给你的前端小伙伴的接口可靠性。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: