转载网址:https://blog.csdn.net/u011474028/article/details/55099705

本文档提供了一些phpunit官方教程没有提到的信息,帮助初学者快速了解php单元测试,在phpunit官网提供了详细的中文教程,可选多种格式下载

phpunit官网地址:https://phpunit.de/

何为单元测试:

指对软件中的基本单元进行测试,如函数、方法等,以检查其返回值或行为是否符合预期;实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文(或者说参数)和环境(比如打桩模拟一些对象)来运行,并监控其行为和返回值,为此我们就需要写出做这件事情的程序代码,这样的代码叫做测试用例,许多测试用例有机结合在一起形成一个整体的测试,又叫做测试套件,被测试的程序代码叫做生产代码。phpunit这个软件就是用来帮助我们写测试用例并进行测试的。

php的单元测试:phpunit

在其官网有详细教程,这里介绍一些补充内容。
首先要明白phpunit软件本身就是由php语言实现,其使用是通过命令行进行的,并不是通过浏览器访问
明白这一点很重要,许多新人被卡在这里。很基础也很简单,但似乎没怎么被提及

在官网下载后得到一个phar文件,关于phar归档文件的介绍可参见云客的另外一篇帖子:点击这里

请同时下载phpunit使用文档,按照里面的安装方法进行安装,之后在命令行输入以下命令:

phpunit --help

如果显示出了帮助信息即安装成功,在命令行当前目录下建立一个测试用例为yunke.php,内容如下:

<?phpuse PHPUnit\Framework\TestCase;class yunkeTest extends TestCase{public function testPushAndPop(){$stack = [];$this->assertEquals(0, count($stack));array_push($stack, 'foo');$this->assertEquals('foo', $stack[count($stack) - 1]);$this->assertEquals(1, count($stack));$this->assertEquals('foo', array_pop($stack));$this->assertEquals(0, count($stack));}}?>

然后在命令行输入以下命令:

phpunit yunke

显示如下内容:

PHPUnit 5.7.12 by Sebastian Bergmann and contributors..                                                                   1 / 1 (100%)Time: 159 ms, Memory: 7.00MBOK (1 test, 5 assertions)

恭喜,你已经成功运行了一个单元测试,第一行是作者信息(Sebastian Bergmann这个家伙很喜欢署名啊)
第二行以一个句点开始,表示所有测试成功通过

你可能会疑惑,上面的php代码是怎么回事呢?

那就是一个测试用例,简单的测试了一个数组操作,进行单元测试一般通过以下四步:

1. 针对生产代码类 Class 的测试写在类 ClassTest中。
2. ClassTest(通常)继承自 PHPUnit\Framework\TestCase。
3. 测试都是命名为 test* 的公用方法。也可以在方法的文档注释块(docblock)中使用 @test 标注将其标记为测试方法。
4. 在测试方法内,类似于 assertEquals()这样的断言方法用来对实际值与预期值的匹配做出断言判断。

这里你可能会有几个地方迷惑:

1、在注释块中使用的标注,php可以通过反射得到,程序可以利用得到的信息进行配置
2、上列中测试用例代码里面的TestCase类来自哪里?并没有被加载啊?
上文提到phpunit本身是用php语言写成的,打包成了phar供使用,phar是可执行的,执行时首先执行包里面的存根文件stub
你可以按照上文云客的另外一篇phar帖子介绍的方法提取还原phpunit.phar包,或者使用phpstorm这样的ide直接打开
在.phar/stub.php里你将看到存根代码,TestCase类就是在存根代码里面require的
“phpunit yunke”这条命令行代码将首先运行phpunit脚本,从存根文件开始执行,然后由phpunit加载测试用例代码
可以看出程序并不是从测试用例脚本开始执行的,现在明白TestCase类哪里来的了吧

通过以上内容再配合官网文档,新手应该可以顺利入门了

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

php单元测试入门教程phpunit详解相关推荐

  1. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  2. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  3. 万字肝完nodejs入门教程,详解入口,建议收藏(更新中)

    nodejs入门教程 1.前言 2.入门教程 2.1 命令行运行node.js脚本 2.2 退出node.js程序 2.3 如何使用 Node.js REPL 2.3.1 使用方式 2.3.2 点命令 ...

  4. Aras入门教程2_ItemType详解

    -----PLM从业者,Teamcenter.Aras Innovator实施,Aras中文资料比较少,分享给大家一些Aras入门的材料,如有不完善的地方,欢迎交流----- 概述 对象类(ItemT ...

  5. SpringBoot入门教程(一)详解intellij idea搭建SpringBoot

    最近公司有一个内部比赛(黑客马拉松),报名参加了这么一个赛事,在准备参赛作品的同时,由于参赛服务器需要自己搭建且比赛产生的代码不能外泄的,所以借着这个机会,本地先写了个测试的demo,来把tomcat ...

  6. HTLM 零基础入门教程(详解)

    文章目录 前言 文档的后缀名 HTML 标签 一.htlm概念 二.htlm特点 主要有以下三点: 三.常用标签及其属性 1-文本修饰 2-段落 3-标题 4-序列 5-图片 6-音频文件 7-视频文 ...

  7. python编程语法大全-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货 每天 ...

  8. python编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  9. python编程语法-Python编程入门——基础语法详解(经典)

    今天小编给大家带来Python编程入门--基础语法详解.温馨提示: 亮点在最后! 在这里还是要推荐下我自己建的Python开发学习群:301056051,群里都是学Python开发的,如果你正在学习P ...

  10. Redis数据库教程——系统详解学习Redis全过程

    Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统:     Key-Value Store是当下比较流行的话题,尤其 ...

最新文章

  1. SAP MM UB类型的退货STO流程简述
  2. Java 17正式发布, Oracle宣布免费提供!“版本任你发,我用Java 8”或成历史?...
  3. boost::remove_copy_if相关的测试程序
  4. 首个区块链标准《区块链 参考架构》正式发布
  5. leetcode62. 不同路径
  6. 产品经理专业知识50篇(一)-产品经理应该知道的一些产品术语
  7. FCKEditor在.net的使用 cnblogs
  8. 16.1 Tomcat介绍 16.2 安装jdk 16.3 安装Tomcat
  9. PHP去除顽固空格和编码问题
  10. 2压缩备份数据库_达梦数据库备份与还原
  11. 外挂制作--------NP认识
  12. C/C++框架、库、资源
  13. 六大IT运维服务管理问题总结
  14. 传承中华美德,关注中老年大健康,育润奶粉敬老情浓
  15. A. One-dimensional Japanese Crossword
  16. 网站文章如何被快速收录,网站文章快速收录的方法!
  17. 为了让机器听懂“长篇大论”,阿里工程师构建了新模型
  18. linux文件系统与磁盘(三)LVM逻辑卷管理
  19. Bootstrap4从入门到精通视频教程
  20. AVR单片机-nRF24L01发送接收程序

热门文章

  1. 2018中南大学 计算机考研分数,2018年中南大学考研复试分数线
  2. 2022年第七届IEEE云计算与大数据分析国际会议
  3. 【NVivo教程】使用Nvivo扩展文献综述
  4. 基于SSM的医院科室人员管理系统
  5. TKinter —— GUI in python  4. Handing User Event 小组件 赋功能 (概念 必看!)
  6. 分享一个HTML【叶子特效】,确切一点 是 落叶特效(完整代码)
  7. 将计算机设置成交换机主机,如何将路由器变成交换机功能 路由器变成交换机运用方式介绍【详解】...
  8. netty: LEAK: ByteBuf.release() was not called before it‘s garbage-collected
  9. android+注册+代码,简单的Android用户注册登录实现
  10. 商用字体网站,再也不用怕侵权