PHP单元测试入门教学_PHP使用PHPUnit编写测试


PHP单元测试是保障代码质量、支持持续重构的基础能力,PHPUnit是最成熟测试框架;需用Composer安装为开发依赖,配置composer.json的scripts后可直接运行composer test。

php单元测试入门教学_php使用phpunit编写测试

PHP单元测试不是“可有可无的加分项”,而是保障代码质量、支持持续重构的基础能力。PHPUnit 是 PHP 生态最成熟、文档最完善的测试框架,掌握它等于拿到了 PHP 工程化开发的入门钥匙。

安装 PHPUnit(推荐 Composer 方式)

现代 PHP 项目几乎都用 Composer 管理依赖,PHPUnit 也应作为开发依赖安装:

  • 在项目根目录运行:composer require --dev phpunit/phpunit
  • 安装完成后,可通过 vendor/bin/phpunit --version 验证是否成功
  • 建议将 PHPUnit 命令写入 composer.jsonscripts 区块,例如:
    "test": "phpunit",之后直接运行 composer test 即可

写第一个测试类和测试方法

PHPUnit 要求测试类名以 Test 结尾,测试方法名以 test 开头(或用 @test 注解)。假设你有一个简单函数:

// src/Calculator.php
<?php
class Calculator
{
    public function add(int $a, int $b): int
    {
        return $a + $b;
    }
}

对应测试文件应放在 tests/ 目录下(如 tests/CalculatorTest.php):

立即学习“PHP免费学习笔记(深入)”;

<?php
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    public function testAddReturnsCorrectSum(): void
    {
        $calc = new Calculator();
        $this->assertEquals(5, $calc->add(2, 3));
        $this->assertEquals(0, $calc->add(-1, 1));
    }
}

注意:测试方法必须是 public,且不能带参数;断言方法(如 assertEquals)来自父类 TestCase

常用断言与测试组织技巧

除了 assertEquals,这些断言高频实用:

吐司AI 吐司AI

超多功能的免费在线生图网站!拥有全网更齐全的模型库,0门槛使用!

吐司AI 325 查看详情 吐司AI
  • $this->assertTrue($condition):检查布尔表达式为真
  • $this->assertNull($value):验证值为 null
  • $this->assertContains('needle', $haystack):检查数组或字符串是否包含目标内容
  • $this->expectException(\InvalidArgumentException::class):预期某段代码抛出指定异常

小技巧:

  • 每个测试方法只测一个关注点(单一职责),便于定位失败原因
  • 使用 setUp() 方法准备公共对象(如 new Calculator()),避免重复代码
  • dataProvider 实现参数化测试,一组数据跑多个输入输出组合

运行测试与解读结果

在项目根目录执行:vendor/bin/phpunit tests/CalculatorTest.php

成功时显示绿色 OK,失败时会标红并指出哪行断言失败、期望值 vs 实际值。例如:

Failed asserting that 4 matches expected 5.

说明 add(2, 3) 返回了 4 而非 5 —— 这就是测试帮你揪出的 bug。

基本上就这些。不复杂但容易忽略:测试不是写完再补,而是和功能代码一起写(TDD 或至少 ATDD),越早开始,收益越大。

以上就是PHP单元测试入门教学_PHP使用PHPUnit编写测试的详细内容,更多请关注php中文网其它相关文章!


# 第一个  # 广州网站高端建设费用  # SEO技巧组合素描简单  # 个人微信营销推广  # 网站空间怎么建设  # 济源网站建设推广公司  # 龙岩网站seo推广  # 定安公司网站推广报价  # 东莞网络推广和营销  # 如何建立地区网站推广  # 昆明网站优化排名推广  # 多个  # php  # 放在  # 最成熟  # 组中  # 转化为  # 几个  # 重构  # 单元测试  # 遍历  # composer  # json  # js 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 在PySimpleGUI中实现键盘按键绑定按钮事件  《via浏览器》强制缩放网页设置方法  Teambition网盘如何共享文件  J*aScript对象中深度嵌套URL键的查找与更新策略  苹果手机缓存怎么清除_苹果手机缓存如何清除iphone各版本操作步骤  服装短视频如何起号推广?服装短视频起号推广有什么要求?  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  管理打开的编辑器:固定、分组和关闭技巧  风神瞳获取全攻略  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  PHP utf8_encode 字符编码转换疑难解析与最佳实践  b站网页版入口 哔哩哔哩官方网站直接进入  如何查找哪个composer包引入了特定的依赖?  苹果官网国补入口在哪  b站怎么查看视频的码率_b站视频码率查看方法  中大网校app做题记录清除方法  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  抖音视频如何添加标题?添加标题有哪些好处?  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制  Linux如何自动分析系统异常日志_Linux日志智能检测  招商淘客入门指南  VS Code的时间线(Timeline)视图:您的代码时光机  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  Python定时发送QQ消息  VS Code中的Tailwind CSS IntelliSense插件使用技巧  《全民k歌》网页版最新登录入口一览  12306不能订票的时间段是固定的吗? | 节假日购票时间有无变化  12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案  Firefox OS应用开发:解决XMLHttpRequest跨域请求阻塞问题  如何在mysql中比较InnoDB和MyISAM区别  Go语言中方法与接收器:指针和值类型的调用机制详解  realme 10 Pro息屏方案_realme 10 Pro省电策略  PHP中获取HTTP响应状态消息:方法与限制  rabbitmq 持久化有什么缺点?  126邮箱申请入口官网_126邮箱注册免费登录2025  附近酒吧怎么找?  支付宝网页版在线入口 支付宝官网电脑登录入口  铁路12306怎么申请退票_铁路12306退票申请操作流程  Win10输入法不见了怎么办 Win10找回语言栏图标教程  深入理解Python对象引用与链表属性赋值  《雷电模拟器》自动点击设置方法  荣耀magicv5怎么上手测评  动漫岛汉化官网网 动漫岛官方动漫汉化地址  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  《合金装备4》有望推出重制版!制作人发话了 

 2025-12-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.