Laravel 单元测试

前言

当前使用Laravel8.x
一代版本一代神

创建测试文件
# 项目根目录下使用php artisan 命令创建
php artisan make:test UserTest
# tests/Feature/UserTest.php
# 类中的每一个public方法即一个测试用例

# 需要进行数据库,缓存...相关测试
# 请配置 项目根目录下 phpunit.xml 文件
运行测试
# 测试 tests/Feature 下所有测试文件
# 不符合预期则输出具体位置&差异
php artisan test --testsuite=Feature --stop-on-failure
DatabaseTransactions
# use Illuminate\Foundation\Testing\DatabaseTransactions
# 测试类可以使用这个Trait
# 使用的作用:测试中对数据库的操作,在测试结束后不同步到数据库(不影响数据库)
http测试
# http 请求
# method 请求方法:get,post,put......
# url 请求地址 string
# params 请求参数 array
# headers http header 头信息设置 array
# 返回 response
$this->"method"("url","params","headers")

# 断言响应http状态码 
 $response->assertStatus(200);
# 断言响应http body的某些参数是否含相等
 $response->assertJson(['code' => 10001]);
常用断言
# 判断两个值是否相等
# message 不相等时的信息提示
 $this->assertEquals("value1","value2","message");
 
# 判断两个值是否不相等
$this->assertNotEquals("value1","value2","message");

# 判断值是否为空
$this->assertEmpty("value","message");
 
# 判断值是否不为空
$this->assertNotNull("value","message");
 
# 断言 value 这个"值"(不是key) 在 haystack 中存在
$this->assertContains("value","haystack");
# 示例 返回true
$this->assertContains('a', [0 => 'a']);
添加测试数据
# 有时候测试需要添加测试数据
# 总不能自己写sql造假数据
# 可以使用数据工厂类添加假数据

# 1.创建数据工厂类
php artisan make:factory “工厂类名” --model=“对应的数据库模型”
# 示例:
php artisan make:factory UserFactory --model=App/Models/Auth/User
# 这个例子创建的命名空间不对,因为我的模型是 App/Models/Auth/User.php
# 不是 App/Models/User
# 但是通过artisan 生成的命名空间是 namespace Database\Factories\Auth
# 不符合psr规范,所以要改
# 顺便指定工厂绑定的模型,设置model属性
# definition() 中定义创建数据的字段内容
# 结果如下:
namespace Database\Factories;

use App\Models\Auth\User;
use Illuminate\Database\Eloquent\Factories\Factory;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name,
            'mobile' => $this->faker->phoneNumber,
            'password' => $this->faker->password,
            'creator' => 1,
            'updater' => 1,
            'created_at' => now(),
            'updated_at' => now(),
        ];
    }
}

$this->faker 提供了生成数据内容的方法
介绍常用方法

        # 注意事项 配置config/app.php
        # 默认en_us 插入的数据格式不符合中国的标准
        'faker_locale' => 'zh_CN'

        # 生成名称
        $this->faker->name;
        # 生成手机号
        $this->faker->phoneNumber;
        # 生成邮箱
        $this->faker->email;
        # 生成图片地址
        $this->faker->imageUrl;

数据工厂类的使用
单表创建

# new 实例化
# count(total) 指定创建条数
# create() 创建数据
UserFactory::new()->count(10)->create();
# user 表创建了10条数据

namespace Tests\Feature;

use Database\Factories\UserFactory;
use Tests\TestCase;

class UserTest extends TestCase
{
    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function test_example()
    {
        UserFactory::new()->count(10)->create();
        $this->assertNotNull("successful");
    }
}

关联创建

# 上面介绍了单个表数据填充
# 现在来填充两张有关联关系表的数据表
# user 用户表 post 文章表
# 关联关系 post.user_id = user.id
# 可以使用 afterCreating() 在执行UserFactory后 获取创建的user信息后执行PostFactory
# 使用state()给post添加user_id

PostFactory

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

class PostFactory extends Factory
{
    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'title' => $this->faker->title,
            'created_at' => now(),
            'updated_at' => now(),
        ];
    }
}

填充两张表数据

namespace Tests\Feature;

use Database\Factories\PostFactory;
use Database\Factories\UserFactory;
use Tests\TestCase;

class UserTest extends TestCase
{
    /**
     * A basic feature test example.
     *
     * @return void
     */
    public function test_example()
    {
        UserFactory::new()->count(10)->afterCreating(function ($user) {
            PostFactory::new()->count(1)->state(function () use ($user) {
                return ['user_id' => $user->id];
            })->create();
        })->create();
        $this->assertNotNull("successful");
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值