0

0

教你掌握 Laravel 的测试方法

藏色散人

藏色散人

发布时间:2020-07-28 13:54:25

|

6516人浏览过

|

来源于phpzendo

转载

下面由laravel教程栏目给大家介绍掌握 laravel 的测试方法,希望对需要的朋友有所帮助!

教你掌握 Laravel 的测试方法

掌握 Laravel 的测试方法

不管你承认与否在研发一款产品时,软件测试对项目而言意义重大,然而是测试通常被我们视而不见。这篇文章我们主要研究 Laravel 框架的测试方法。

或许你还不知道,Laravel 内核早已继承了 PHPUnit 单元测试组件。PHPUnit 是 PHP 社区里使用最广泛、最受欢迎的测试框架之一。PHPUnit 同时支持「单元测试」和「功能测试」两种特性。

我们会简单介绍 PHPUnit 「单元测试」和「功能测试」的基本使用方法。继而,讲解如何在 Laravel 项目中创建「单元测试」和「功能测试」用例。不过本篇我们假定你已经对 PHPUnit 测试框架有了基本的了解,所以让我们把焦点放到 Laravel 中使用 PHPUnit 进行测试这个主题中。

单元测试和功能测试

如果您已经接触过 PHPUnit 框架,那么您应该知道,它支持两种类型特性 -- 「单元测试」和「功能测试」。

「单元测试」的目的是用于测试函数或方法的正确性。更重要的是,我们可以轻松实现代码逻辑的正确性。

如果您在开发过程中发现某个功能包含多个逻辑处理,那么最好将每个处理逻辑拆分到不同的方法里,这样以确保单个方法和代码块可测试。

我们以一个理想的方法来窥探单元测试的奥秘。

如你所见,这个方法仅处理一个业务逻辑,方法内部通过 ucfirst 函数将字符转换成首字母大写格式。

单元测试是为了保证每个独立单元的代码正确性;功能测试则是为了保证一个功能的正确性。一言以蔽之,就是通过特定的测试用例模拟用户访问应用的行为验证系统的正确性。

例如,我们可以为包含如下步骤的登录功能实现一个功能测试用例:

  • 发起一个访问登录页面的 GET 请求;

  • 判断我们是否处在登录页面;

  • 生成用于采用 POST 请求方式登录的登录数据;

  • 判断是否创建登录会话数据成功。

这就是应该如何创建「功能测试」用例的秘密。接下来我们将创建具体的测试用例,来讲解如何在 Laravel 中使用「单元测试」和「功能测试」。

搭建测试环境

创建测试模型

在开始创建测试用例前,我们需要先构建起用于测试的项目依赖。

先执行下面的 artisan 命令创建一个 Post 模型及其对应的迁移文件。

$ php artisan make:model Post --migration

上面的命令将为我们创建一个 Post 模型类和数据库迁移文件。

Post 模型代码如下:

数据库迁移文件 YYYY_MM_DD_HHMMSS_create_posts_table.php 将创建在 database/migrations 目录中。

Post 数据表会存储一篇文章的标题。修改后 Post 数据库迁移文件代码如下:

increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

如你所见,我们通过新增的 $table->string('name') 来存储文章的标题。接下来,执行数据库迁移命令就回在数据库中创建对应的数据表了。

$ php artisan migrate

在创建完数据表之后,我们需要向 Post 模型类中加入如下代码

我们刚刚添加了 accessor 方法,它的功能是修改文章的标题,这正是我们在单元测试用例中要测试的。以上就是 Post 模型所需要修改的内容。

创建测试控制器

万知
万知

万知: 你的个人AI工作站

下载

接下来,我们需要创建一个文件名为 app/Http/Controllers/AccessorController.php 的控制器,它将被用于后续功能测试。

get("id", 0);
        // load the requested post
        $post = Post::find($post_id);
        // check the name property
        return $post->name;
    }
}

在 index 方法中,我们通过请求中的 id 参数,从 Post 模型中查询一篇文章。

最后,在 routes/web.php 路由配置文件里定义相关路由。

设置完路由后就可以通过 http://your-laravel-site.com/accessor/index 访问该路由是否能够正常访问了。

单元测试

上一节我们搭建了用于测试的环境。本节我们会在 Laravel 中编写单元测试用例对 Post 模型进行测试。

幸运的是,Laravel 同样为我们提供了创建测试用例模版文件的命令工具。

通过在命令行里执行下面的命令来创建 AccessorTest 单元测试用例类。注意我们需要通过 --unit 参数选项来表明这个命令创建一个单元测试用例。单元测试用例文件被创建在 tests/Unit 目录内。

$ php artisan make:test --unit

执行上面创建测试用例命令会创建文件名为 tests/Unit/AccessorTest.php 文件。

assertTrue(true);
    }
}

将 testExample 方法替换成更有实际意义的方法:

title);
        $model_post = Post::find(1);
        $model_post_title = $model_post->title;
        $this->assertEquals($db_post_title, $model_post_title);
    }
}

我们可以看到更新后的代码和 Laravel 代码编码风格完全一致。在类的开始我们引入了相关依赖类文件。在 testAccessorTest 方法里,我们希望验证定义在 Post 模型里面的 getNameAttribute 方法的正确性。

为了实现这样的测试功能,我们通过 DB 类使用原生 SQL 查询到一篇文章,并将文章的标题赋值给 $db_post_title 变量。

之后,我们通过 Post 模型获取经过 getNameAttribute 方法处理过后的同一篇文章的标题赋值给 $model_post_title。

最后,通过 assertEquals 方法比较两个变量是否相等。

以上就是如何在 Laravel 中使用单元测试的使用方法。

功能测试

这一节我们将学习如何创建功能测试用例来对先前创建的控制器进行「功能测试」。

通过下面给出的命令,我们将创建一个名为 AccessorTest 的功能测试用例。注意这边我们没有使用 --unit 命令行选项,所以命令会在 tests/Feature 目录下创建一个「功能测试」用例。

$ php artisan make:test AccessorTest

命令会创建文件名为 tests/Feature/AccessorTest.php 的测试类。

assertTrue(true);
    }
}

同样我们替换掉 testExample 方法。

name);
        $response = $this->get('/accessor/index?id=1');
        $response->assertStatus(200);
        $response->assertSeeText($db_post_title);
    }
}

熟悉功能测试的朋友应该对上面的代码不会太陌生。

首先,我们还是通过 DB 类使用原生 SQL 查询到一篇文章,并将文章的标题赋值给 $db_post_title 变量。接着我们模拟一个访问 /accessor/index?id=1 URI 的 GET 请求,并通过 $response 变量接收响应。

然后,我们去匹配请求响应的状态码是否为 200。在我们的测试用例中的这个 GET 请求响应状态码应该是 200。此外,测试后还将获取到一个首字母大写的标题,判断标题是否与 $db_post_title 相对的方法是 assertSeeText。

编写完成所有的测试用例后。接下来需要去执行这些测试用例。在 Laravel 项目中运行 PHPUnit 测试用例,仅需在项目更目录执行下面的命令。

$ phpunit

这个命令会运行项目中的所有测试用例。测试中的断言会以标准的 PHPUnit 输出显示在控制台。

总结

今天,我们探讨了 Laravel 内置测试组件 PHPUnit 的测试用例实现方法。本文仅涉及 PHPUnit 「单元测试」和「功能测试」的基础知识,工作中我们还需要结合实际出发,对 PHPUnit 测试进行深入研究才行。

此外,我们还学习了通过使用 artisan 命令行工具创建分别创建了用于单元测试和功能测试的测试用例的方法。

原文地址:https://learnku.com/laravel/t/33394

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

320

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

278

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

373

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

374

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

86

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

65

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

68

2025.08.05

数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

749

2023.10.12

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号