什么是PHPUnit?在PHP项目中怎么使用?

镜像地址 : PHPUnit简介以及如何在项目中使用 - 多厘(https://wulicode.com/php/vendor/phpunit-at-project/index.html)
官方文档:https://phpunit.readthedocs.io/zh_CN/latest/
单元测试介绍
单元测试是分别对程序的单元(方法, 函数)进行测试,判断执行结果是否符合预期
单元测试能协助开发者什么?
1.确保单元的执行结果
2.尽早发现程序中的错误
3.修改程序, 更加有信心
PHPUnit
PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,PHPUnit 是参考 xUnit 架构利用 PHP 实作出来。
安装PHPUnit
# 项目中安装 $ composer require --dev phpunit/phpunit # 下载到本地 $ wget https://phar.phpunit.de/phpunit-9.phar
使用项目中安装可以在项目中直接运行, 无需太多配置, 将 phar 下载到非项目文件夹, 可以减少项目代码的体积, 我一般采用下载到本地, 然后多个项目公用一个 phpunit.phar, 减少项目体积, 不过需要在 IDE中增加更多配置
配置autoload
添加下面的代码到composer.json PackageName是项目的名称,src是包含PHP class文件的文件夹地址,项目根目录下的子文件夹。
...
"autoload": {
"psr-4": {
"PackageName\\": "src/",
"PackageName\\Tests": "tests/"
}
},
...设置PHPUnit
在phpstorm中 Languages & Frameworks >PHP >Test Frameworks 根据不同的加载方式设置不同的配置

如果是项目额外加载, 则需要把 phpunit 所在的文件夹作为 library 加入项目, 便于代码提示 Preferences | Languages & Frameworks | PHP , 加入 phpunit 文件夹

编写PHPUnit测试
针对类
Example的测试写在类ExampleTest中,ExampleTest继承自TestCase对于方法的测试命名为
test*的公用方法在测试方法内,类似于
assertEquals()的断言方法用来对实际值和预期值的匹配做出验证
ArrayTest 用 PHPUnit 测试数组操作
<?php
use PHPUnit\Framework\TestCase;
class ArrayTest extends TestCase
{
public function testPushAndPop()
{
$stack = [];
$this->assertCount(0, $stack);
$stack[] = 'foo';
$this->assertEquals('foo', $stack[count($stack) - 1]);
$this->assertCount(1, $stack);
$this->assertEquals('foo', array_pop($stack));
$this->assertCount(0, $stack);
}
}在 IDE 中运行
- 点击方法名称
- 右键测试类
- 右键测试文件夹

PHPUnit 断言
laravel 中除了标准的 PHPUnit 断言(assertEquals(), assertContains(), assertInstanceOf(), …更多断言请看https://phpunit.readthedocs.io/zh_CN/latest/assertions.html?highlight=assertTrue#)之外, 还存在很多允许测试 web 应用的检测项目
assertPageLoaded($uri, $message = null)
检测最近的页面是否被加载, 如果不存在 url / message 时候会报错
assertResponseOk()
是否页面相应OK
assertReponseStatus($code)
是否响应指定的code
assertViewHas($key, $value = null)
视图中是否存在指定的数据
assertViewHasAll($bindings)
视图中是否存在指定的一系列数据
assertViewMissing($key)
指定视图中是否不存在这个数据
assertRedirectedTo($uri, $with = [])
检测是否重定向到指定的uri
assertRedirectedToRoute($name, $parameters = [], $with = [])
是否客户端重定向到指定的路由
assertRedirectedToAction($name, $parameters = [], $with = [])
是否重定向到 action
assertSessionHas($key, $value = null)
session 中是否存在 key/ value
assertSessionHasAll($bindings)
session 中是否存在指定的 kv
assertSessionHasErrors($bindings = [])
session 是否存在错误
assertHasOldInput()
session 中是否存在以前的数据
示例 xml 文件
phpunit.xml at 9.x · laravelhttps://github.com/laravel/laravel/blob/9.x/phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">./app</directory>
</include>
</coverage>
<php>
<env name="APP_ENV" value="testing"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_DRIVER" value="array"/>
<!-- <env name="DB_CONNECTION" value="sqlite"/> -->
<!-- <env name="DB_DATABASE" value=":memory:"/> -->
<env name="MAIL_MAILER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>Php 的单元覆盖率
安装 xdebug / Phpunit
# 安装 xdebug $ pecl install xdebug
启用 xdebug
# php.ini 文件 xdebug.mode = coverage


推荐学习:《PHP视频教程》
-
C#CheckedListBox控件用法详解(属性、方法、事件) 时间:2025-12-12 -
-
minidump.dmp是什么文件?怎么打开?可以删除吗? 时间:2025-12-12 -
teniodl.exe是什么进程?怎么彻底关闭? 时间:2025-12-12 -
display:block是什么意思?display:block属性的作用? 时间:2025-12-12 -
什么是updater.exe?怎么删除?如何关闭? 时间:2025-12-12
今日更新
-
微信文件传输助手网页版在哪找-微信传输助手网页版使用教程详解
阅读:18
-
乒乓球梗王是什么梗?揭秘爆笑名场面背后的出圈密码
阅读:18
-
稳定币维持价格稳定的关键机制与原理解析
阅读:18
-
迅雷浏览器手机版极速下载安装包-迅雷浏览器安卓最新正式版下载
阅读:18
-
微信文件传输助手网页版-官方入口与使用指南
阅读:18
-
欧易平台支持哪些USDT交易对?完整列表一览
阅读:18
-
揭秘乒乓球网红梗爆火真相 看马龙张继科如何带歪全民玩梗
阅读:18
-
三角洲行动官网高画质极速登录入口-三角洲行动官网2025最新地址分享
阅读:18
-
欧易平台USDT交易指南:新手入门与高效操作技巧
阅读:18
-
文件传输助手如何登录-文件传输助手使用教程-华军软件园
阅读:18










