phpunit

news/2024/12/22 15:14:44/

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;}
}

说明文档

 

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


http://www.ppmy.cn/news/987258.html

相关文章

Hadoop平台集群之间Hive表和分区的导出和导入迁移(脚本)

要编写Shell脚本实现两个Hadoop平台集群之间Hive表和分区的导出和导入迁移 你可以使用Hive的EXPORT和IMPORT命令结合Hadoop的DistCp命令。下面是一个示例脚本&#xff1a; #!/bin/bash# 导出源Hive表的数据到HDFS source_hive_table"source_db.source_table" targe…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(11)-Fiddler设置安卓手机抓包,不会可是万万不行的!

1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求&#xff0c;也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler能截获 Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。 今天宏哥讲解和分享Fiddler 如何截获安卓移动端发出的 HTTP/HTTPS 请求。 2.环…

子网重叠测试

子网重叠的两个网络可以相互通 虽然子网掩码不同&#xff0c;但是 R1 可以 ping R2&#xff1a; <R1>ping 10.0.12.14PING 10.0.12.14: 56 data bytes, press CTRL_C to breakReply from 10.0.12.14: bytes56 Sequence1 ttl255 time50 msReply from 10.0.12.14: bytes5…

watch避坑,使用computed进行处理数据

业务场景&#xff1a;在vue中监听el-input 中的字数有没有超过60&#xff0c;如果超过60字时将60后面的字变为 “>>” 符号&#xff0c;以此实现预览苹果手机推送摘要场景。 错误&#xff1a;开始的逻辑是使用watch监听&#xff0c;检查length超过60直接 加上符号&#x…

2023年自然语言处理与信息检索国际会议(ECNLPIR 2023) | EI Compendex, Scopus双检索

会议简介 Brief Introduction 2023年自然语言处理与信息检索国际会议(ECNLPIR 2023) 会议时间&#xff1a;2023年9月22日-24日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;ECNLPIR 2023-2023 Eurasian Conference on Natural Language Processing and Information Retr…

QMQTT快速入门

文章目录 QMQTT快速入门环境搭建mosquitto 服务器和客户端配置服务器配置客户端配置模拟MQTT的发布订阅 QMQTT - Windows下的客户端项目代码展示遇到的问题 QMQTT快速入门 环境搭建 准备一台linux设备和一台windows设备虚拟机也是可以的&#xff1b;安装mosquitto &#xff1…

SpringBoot集成Lock4j 底层使用Redission 实现分布锁

Lock4j 在分布式系统中&#xff0c;实现锁的功能对于保证数据一致性和避免并发冲突是非常重要的。Lock4j是一个简单易用的分布式锁框架&#xff0c;而Redisson是一个功能强大的分布式解决方案&#xff0c;可以与Lock4j进行集成。 操作步骤 第一步&#xff1a;添加依赖 首先&…

​《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(9)-Fiddler如何设置捕获Https会话​

1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议&#xff0c;不像前十几年前直接是http协议直接裸奔在互联网。还有的小伙伴或者童鞋们按照上一篇宏哥的配置都配置好了&#xff0c;想大展身手抓一下百度的包&#xff0c;结果一试傻眼了&#xff0c;竟然毛都没有…