IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Laravel 单元测试 -> 正文阅读

[开发测试]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");
    }

}
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:30:46  更:2022-04-15 00:31:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:15:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码