当前位置: 首页 > news >正文

phpunit

composer地址:phpunit/phpunit - Packagist

官方文档:PHPUnit文档 – PHP测试框架

PHPUnit是一个框架,最为hyperf学习的补充学习,就不写这么细了。

估计写下安装和使用,具体学习内容看文档。

一、安装

 需安装扩展:dom、pcre、xdebug

composer require phpunit/phpunit:9.6.10

 安装命令行。之所以安装命令,因为其运行方式的问题。自定义入口调用,注释好像无效。

#linux
wget https://phar.phpunit.de/phpunit-9.6.10.phar
$ chmod +x phpunit-9.6.10.phar
$ sudo mv phpunit-9.6.10.phar /usr/local/bin/phpunit
$ phpunit --version#windows
下载 https://phar.phpunit.de/phpunit-9.6.10.phar
创建文件 d:/phpunit,将该添加到环境变量。将下载文件重命名为phpunit.phar,放到之前文件中。
进入文件并执行命令。
echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
再开新命令行窗口执行phpunit可见其详细命令。
经过测试用Tortoisegit和vscode的相关命令行执行echo倒是没问题,但是输入phpunit会报错没命令行。

 phpunit命令行解释

Usage:phpunit [options] UnitTest.phpphpunit [options] <directory>Code Coverage Options:--coverage-clover <file>    生成Clover XML格式的代码覆盖率报告--coverage-cobertura <file> 生成Cobertura XML格式的代码覆盖率报告--coverage-crap4j <file>    生成Crap4J XML格式的代码覆盖率报告--coverage-html <dir>       生成HTML格式的代码覆盖率报告--coverage-php <file>       导出PHP_CodeCoverage对象到文件--coverage-text=<file>      生成文本格式的代码覆盖率报告[默认:标准输出]--coverage-xml <dir>        生成PHPUnit XML格式的代码覆盖率报告--coverage-cache <dir>      缓存静态分析结果--warm-coverage-cache       静态分析缓存--coverage-filter <dir>     在代码覆盖率分析中包括<dir>--path-coverage             执行路径覆盖分析--disable-coverage-ignore   禁用忽略代码覆盖的注释--no-coverage               忽略代码覆盖配置Logging Options:--log-junit <file>          以JUnit XML格式记录测试执行到文件--log-teamcity <file>       以TeamCity格式记录测试执行到文件--testdox-html <file>       以HTML格式编写敏捷文档--testdox-text <file>       以文本格式编写敏捷文档--testdox-xml <file>        以XML格式编写敏捷文档--reverse-list              按相反顺序打印缺陷--no-logging                忽略日志配置Test Selection Options:--list-suites               列出可用的测试套件--testsuite <name>          筛选要运行的测试套件--list-groups               列出可用的测试组--group <name>              仅运行指定组中的测试--exclude-group <name>      从指定的组中排除测试--covers <name>             只运行带有“@covers <name>”注释的测试--uses <name>               只运行带有“@uses <name>”注释的测试--list-tests                列出可用的测试--list-tests-xml <file>     以XML格式列出可用的测试--filter <pattern>          筛选要运行的测试--test-suffix <suffixes>    只在带有指定后缀的文件中搜索test。默认值:Test.php .phptTest Execution Options:--dont-report-useless-tests 不报告没有测试的测试结果--strict-coverage           严格使用@covers注释--strict-global-state       对全局状态的更改要严格--disallow-test-output      在测试期间严格控制输出--disallow-resource-usage   在小型测试期间严格控制资源使用--enforce-time-limit        根据测试大小强制执行时间限制--default-time-limit <sec>  不包含@small、@medium或@large的测试超时(以秒为单位)--disallow-todo-tests       禁止使用带有@todo注释的测试--process-isolation         在单独的PHP进程中运行每个测试--globals-backup            为每个测试备份和恢复$GLOBALS--static-backup             备份和恢复每个测试的静态属性--colors <flag>             在输出中使用颜色("never", "auto"或"always")--columns <n>               用于进度输出的列数--columns max               为进度输出使用最大列数--stderr                    写入STDERR而不是STDOUT--stop-on-defect            第一次测试不通过时停止执行--stop-on-error             第一次出错时停止执行--stop-on-failure           在第一次错误或失败时停止执行--stop-on-warning           在第一次警告时停止执行--stop-on-risky             在第一次危险测试时停止执行--stop-on-skipped           在第一次跳过测试时停止执行--stop-on-incomplete        在第一次测试未完成时停止执行--fail-on-incomplete        将不完整的测试视为失败--fail-on-risky             将有风险的测试视为失败--fail-on-skipped           将跳过的测试视为失败--fail-on-warning           将带有警告的测试视为失败-v|--verbose                输出更详细的信息--debug                     显示调试信息--repeat <times>            重复运行测试--teamcity                  以TeamCity格式报告测试执行进度--testdox                   以TestDox格式报告测试执行进度--testdox-group             只包括来自指定组的测试--testdox-exclude-group     从指定的组中排除测试--no-interaction            禁用TestDox进度动画--printer <printer>         使用的TestListener实现--order-by <order>          按顺序运行测试:默认|缺陷|持续时间|不依赖|随机|反向|大小--random-order-seed <N>     对于随机顺序,使用特定的随机种子<N>--cache-result              将测试结果写入缓存文件--do-not-cache-result       不写测试结果缓存文件Configuration Options:--prepend <file>            尽早包含的PHP脚本--bootstrap <file>          在测试运行之前包含的PHP脚本-c|--configuration <file>   从XML文件中读取配置--no-configuration          忽略默认配置文件(phpunit.xml)--extensions <extensions>   要加载的PHPUnit扩展的逗号分隔列表--no-extensions             不加载PHPUnit扩展--include-path <path(s)>    在PHP的include_path前面加上给定的路径-d <key[=value]>            设置php.ini值--cache-result-file <file>  指定结果缓存路径和文件名--generate-configuration    生成具有建议设置的配置文件--migrate-configuration     将配置文件迁移到当前格式Miscellaneous Options:-h|--help                   打印此使用信息--version                   打印版本并退出--atleast-version <min>     检查版本是否大于最小并退出--check-version             检查PHPUnit是否为最新版本

二、使用

/vendor/phpunit/src/Framework/Assert/Functions.php中定义namespace PHPUnit\Framework,并设置其余方法。PHPUnit\Framework命名空间下可以直接使用定义的方法,并且每个方法的具体实现由PHPUnit\Framework\Assert类负责,在composer.json中自动加载。

具体使用时继承PHPUnit\Framework\TestCase,而TestCase继承Assert类,所以使用时使用Functions中的函数十使用$this和直接使用方法都可。

#vendor\phpunit\phpunit\composer.json"autoload": {"classmap": ["src/"],"files": ["src/Framework/Assert/Functions.php"]},
#PHPUnit\Framework\Function.php
if (!function_exists('PHPUnit\Framework\assertEquals')) {/*** Asserts that two variables are equal.** @throws ExpectationFailedException* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException** @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit** @see Assert::assertEquals*/function assertEquals($expected, $actual, string $message = ''): void{Assert::assertEquals(...func_get_args());}
}#PHPUnit\Framework\Assert/*** Asserts that two variables are equal.** @throws \SebastianBergmann\RecursionContext\InvalidArgumentException* @throws ExpectationFailedException*/public static function assertEquals($expected, $actual, string $message = ''): void{$constraint = new IsEqual($expected);static::assertThat($actual, $constraint, $message);}#PHPUnit\Framework\TestCase 
abstract class TestCase extends Assert implements Reorderable, SelfDescribing, Test
{
}
phpunit src/StackTest.php
PHPUnit 9.6.10 by Sebastian Bergmann and contributors.F.F                                                                 3 / 3 (100%)Time: 00:00.003, Memory: 20.00 MBThere were 2 failures:1) app\StackTest::testPushAndPop
Failed asserting that 1 matches expected 0.D:\workspace\php\phpunit\src\StackTest.php:142) app\StackTest::test2
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'foo1'
+'foo'D:\workspace\php\phpunit\src\StackTest.php:29FAILURES!
Tests: 3, Assertions: 5, Failures: 2.
#dir src/StackTest.phpnamespace app;use PHPUnit\Framework\TestCase;class StackTest extends TestCase
{public function testPushAndPop(){$stack = [];$this->assertEquals(0, count($stack));array_push($stack, 'foo');$this->assertEquals('foo', $stack[count($stack) - 1]);\PHPUnit\Framework\assertEquals(0, count($stack));}public function test1(){$stack = [];$this->assertEmpty($stack);array_push($stack, 'foo');return $stack;}/*** @depends test1*/public function test2(array $stack){$this->assertEquals('foo1', $stack[count($stack) - 1]);$this->assertNotEmpty($stack);return $stack;}
}

说明文档

 

可以直接下载,文档内容很详细

相关文章:

phpunit

composer地址&#xff1a;phpunit/phpunit - Packagist 官方文档:PHPUnit文档 – PHP测试框架 PHPUnit是一个框架&#xff0c;最为hyperf学习的补充学习&#xff0c;就不写这么细了。 估计写下安装和使用&#xff0c;具体学习内容看文档。 一、安装 需安装扩展&#xff1a;…...

html学习9(脚本)

1、<script>标签用于定义客户端脚本&#xff0c;比如JavaScript&#xff0c;既可包含脚本语句&#xff0c;也可通过src属性指向外部文件。 2、JavaScript最常用于图片操作、表单验证及内容动图更新。 3、<noscript>标签用于在浏览器禁用脚本或浏览器不支持脚本&a…...

SpringBoot整合Caffeine

一、Caffeine介绍 1、缓存介绍 缓存(Cache)在代码世界中无处不在。从底层的CPU多级缓存&#xff0c;到客户端的页面缓存&#xff0c;处处都存在着缓存的身影。缓存从本质上来说&#xff0c;是一种空间换时间的手段&#xff0c;通过对数据进行一定的空间安排&#xff0c;使得下…...

元宇宙虚拟展厅的特点是什么呢?优势有哪些?

元宇宙是一个很广阔的虚拟世界&#xff0c;它可以创造出更为丰富、沉浸式的体验&#xff0c;这种全新的体验为展览和艺术领域带来了更多的可能性&#xff0c;元宇宙虚拟展厅以其多样化、互动性、沉浸式展示的特点&#xff0c;带领大家进入一个虚拟现实的全新世界。 元宇宙虚拟展…...

Day11-Webpack前端工程化开发

Webpack 一 webpack基本概念 遇到问题 开发中希望将文件分开来编写,比如CSS代码,可以分为头部尾部内容,公共的样式。 JS代码也希望拆分为多个文件,分别引入,以后代码比较好维护。 本地图片,希望可以实现小图片不用访问后端,保存在前端代码中就可以了 运行程序时我…...

什么是函数式编程,应用场景是什么

什么是函数式编程&#xff0c;应用场景是什么 函数式编程和面向对象编程一样&#xff0c;是一种编程规范。强调执行的过程而非结果&#xff0c;通过一系列的嵌套的函数调用&#xff0c;完成一个运算过程。它主要有以下几个特点&#xff1a; 1.函数是"一等公民"&…...

Vue3之路由认识

回顾&#xff1a; 原来的vue2路由是通过this. r o u t e 和 t h i s . route和this. route和this.router来控制的。现在vue3有所变化&#xff0c;useRoute相当于以前的this. r o u t e &#xff0c;而 u s e R o u t e r 相当于 t h i s . route&#xff0c;而useRouter相当于t…...

P1775 石子合并(弱化版)(内附封面)

石子合并&#xff08;弱化版&#xff09; 题目描述 设有 N ( N ≤ 300 ) N(N \le 300) N(N≤300) 堆石子排成一排&#xff0c;其编号为 1 , 2 , 3 , ⋯ , N 1,2,3,\cdots,N 1,2,3,⋯,N。每堆石子有一定的质量 m i ( m i ≤ 1000 ) m_i\ (m_i \le 1000) mi​ (mi​≤1000)。…...

jmeter之接口测试(http接口测试)

基础知识储备 一、了解jmeter接口测试请求接口的原理 客户端--发送一个请求动作--服务器响应--返回客户端 客户端--发送一个请求动作--jmeter代理服务器---服务器--jmeter代理服务器--服务器 二、了解基础接口知识&#xff1a; 1、什么是接口&#xff1a;前端与后台之间的…...

webpack基础知识二:说说webpack的构建流程?

一、运行流程 webpack 的运行流程是一个串行的过程&#xff0c;它的工作流程就是将各个插件串联起来 在运行过程中会广播事件&#xff0c;插件只需要监听它所关心的事件&#xff0c;就能加入到这条webpack机制中&#xff0c;去改变webpack的运作&#xff0c;使得整个系统扩展…...

PHP使用PhpSpreadsheet实现导出Excel时带下拉框列表 (可支持三级联动)

因项目需要导出Excel表 需要支持下拉 且 还需要支持三级联动功能 目前应为PHPExcel 不在维护&#xff0c;固采用 PhpSpreadsheet 效果如图&#xff1a; 第一步&#xff1a;首先 使用composer 获取PhpSpreadsheet 我这里PHP 版本 7.4 命令如下&#xff1a; composer r…...

Openssh高危漏洞CVE-2023-38408修复方案

0x01 漏洞简述 2023年07月21日&#xff0c;360CERT监测发现OpenSSH发布了OpenSSH的风险通告&#xff0c;漏洞编号为CVE-2023-38408&#xff0c;漏洞等级&#xff1a;高危&#xff0c;漏洞评分&#xff1a;8.1。 OpenSSH 是 Secure Shell (SSH) 协议的开源实现&#xff0c;提供…...

Android中的ContentProvider

Android中的ContentProvider 在Android中&#xff0c;ContentProvider是四大组件之一&#xff0c;用于在不同应用程序之间共享和管理数据。它提供了一种标准化的方式来访问和管理应用程序的数据&#xff0c;使得多个应用程序可以安全地共享数据&#xff0c;而无需直接访问彼此…...

if device is None and isinstance(net, torch.nn.Module):的含义?

这段代码的含义是&#xff0c;如果变量 device 为 None 并且 net 是 torch.nn.Module 的实例&#xff0c;那么执行后续的代码块。 解释一下其中的几个部分&#xff1a; device&#xff1a;这是一个代表设备的变量&#xff0c;通常用于指定在哪个设备上执行模型的计算&#xff…...

C++如何用OpenCV中实现图像的边缘检测和轮廓提取?

最近有个项目需要做细孔定位和孔距测量&#xff0c;需要做边缘检测和轮廓提取&#xff0c;先看初步效果图&#xff1a; 主要实现代码&#xff1a; int MainWindow::Test() {// 2.9 单个像素长度um 5倍double dbUnit 2.9/(1000*5);// 定义显示窗口namedWindow("src"…...

智慧水务和物联网智能水表在农村供水工程中的应用

摘 要&#xff1a;随着社会的进步和各项事业的飞速发展&#xff0c;人民生活水平的逐步提升&#xff0c;国家对农村饮水安全有了更高的要求&#xff0c;为了进一步提升农村供水服务的质量&#xff0c;利用现代化、信息化科学技术提升农村供水服务质量&#xff0c;提高用水管理效…...

机器学习笔记 - 了解 GitHub Copilot 如何通过提供自动完成式建议来帮助您编码

一、GitHub Copilot介绍 GitHub Copilot 是世界上第一个大规模 AI 开发人员工具,可以帮助您以更少的工作更快地编写代码。GitHub Copilot 从注释和代码中提取上下文,以立即建议单独的行和整个函数。 研究发现 GitHub Copilot 可以帮助开发人员更快地编码、专注于解决更大的问…...

《数据同步-NIFI系列》Nifi配置DBCPConnectionPool连接SQL Server数据库

Nifi配置DBCPConnectionPool连接SQL Server数据库 一、新增DBCPConnectionPool 在配置中新增DBCPConnectionPool&#xff0c;然后配置数据库相关信息 二、配置DBCPConnectionPool 2.1 DBCPConnectionPool介绍 主要介绍以下五个必填参数 Database Connection URL&#xff1…...

HarmonyOS/OpenHarmony元服务开发-卡片使用自定义绘制能力

ArkTS卡片开放了自定义绘制的能力&#xff0c;在卡片上可以通过Canvas组件创建一块画布&#xff0c;然后通过CanvasRenderingContext2D对象在画布上进行自定义图形的绘制&#xff0c;如下示例代码实现了在画布的中心绘制了一个笑脸。 Entry Component struct Card { private c…...

SpringBoot引入MyBatisGenerator

1.引入插件 <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><configuration><!--generator配置文件所在位置--><configuratio…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...