PHPUnit简介及使用(thinkphp5的单元测试安装及使用)

一、总结

一句话总结:直接google这个phpunit(how to use phpunit),然后去官网看使用样例和手册,那些英文和内容以看懂的,不要有抵触情绪

官网地址:https://phpunit.de/getting-started-with-phpunit.html

1、为什么要用PHPUnit?

测试性能

1、可以通过命令操控测试脚本

2、可以测试性能

3、可以测试代码覆盖率

4、可以自动化的更新测试用例的参数数据

5、各种格式的日志

2、官方phpunit使用实例?

Code

src/Email.php

<?phpfinal classEmail
{private $email;private function __construct($email){$this->ensureIsValidEmail($email);$this->email = $email;}public static function fromString($email){return new self($email);}public function__toString(){return $this->email;}private function ensureIsValidEmail($email){if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {throw newInvalidArgumentException(sprintf('"%s" is not a valid email address',$email));}}
}

Test Code

tests/EmailTest.php

<?phpusePHPUnit\Framework\TestCase;final class EmailTest extendsTestCase
{public functiontestCanBeCreatedFromValidEmailAddress(){$this->assertInstanceOf(Email::class,Email::fromString('user@example.com'));}public functiontestCannotBeCreatedFromInvalidEmailAddress(){$this->expectException(InvalidArgumentException::class);Email::fromString('invalid');}public functiontestCanBeUsedAsString(){$this->assertEquals('user@example.com',Email::fromString('user@example.com'));}
}

3、单元测试的特点(比如phpunit,java的junit)?

文件夹
test
测试函数

a、测试的代码是在test文件夹下的,和源码不是在同一个文件夹下

b、测试的类或者方法都加有test字样

c、有一些常用的测试函数,比如:

assertTrue 为判断是否真
assertFalse 为判断是否假
assertGreaterThan为判断是否大于
assertLessThanOrEqual判断是否小于或等于
assertEquals为判断是否相等

4、thinkphp如何添加单元测试?

手册 杂项

thinkphp的开发手册的杂项里面有教怎么使用单元测试,

thinkphp5的单元测试也是用的phpunit,这张图可以说明

所以关于单元测试的具体方法可以去phpunit官方文档里面看

5、thinkphp的单元测试如何运行?

命令行

我们可以直接在命令行下面运行单元测试

6、thinkphp是否安装单元测试的依据是什么?

tests文件夹

看tp的根目录下是否有tests文件夹

7、thinkphp单元测试手册?

在开发手册的评论下找到的

快速入门 · thinkphp单元测试手册|thinkphp 单元测试|thinkphp 测试 · 看云
https://www.kancloud.cn/code7/tpunit/220874

二、PHPUnit简介及使用

一、PHPUnit是什么?

1、它是一款轻量级的PHP测试框架,地址:http://www.phpunit.cn

2、手册:http://www.phpunit.cn/manual/5.7/zh_cn/installation.html

二、为什么要用PHPUnit?

1、可以通过命令操控测试脚本

2、可以测试性能

3、可以测试代码覆盖率

4、可以自动化的更新测试用例的参数数据

5、各种格式的日志

三、PHPUnit使用规则

1、 一般被测试类的后面加上”Test”,比如要测试的类为Array,则测试用例的命名为ArrayTest。

2、测试类ArrayTest继承于PHPUnit_Framework_TestCase

3、测试方法必须为public权限,都是test开头,或者你也可以选择给其加注释@test来表明该函数为测试函数

4、通过断言方法来对实际值和预期值进行断言,断言方法可以参照手册:http://www.phpunit.cn/manual/5.7/zh_cn/appendixes.assertions.html

快速入门:

class ArrayTest extends PHPUnit_Framework_TestCase 
{
//测试用例运行前初始化
public function setUp(){}

//测试用例运行后执行
public function tearDown(){}
/**
* @test
*/
public function testArrayIsEmpty()
{
$fixture = array();

// 断言数组$fixture中元素的数目是0。
$this->assertEquals(0, sizeof($fixture));
}
/**
* @test
*/
public function testarrayHasKey()
{
$arr = array(
'id'=>666,
'name'=>'zhangsan',
);
//断言$arr是一个数组
$this->assertTrue(is_array($arr));
//断言数组$arr中含有索引id
$this->assertArrayHasKey('id',$arr);
//断言数组$arr中含有索引name
$this->assertArrayHasKey('name',$arr);
}

}

命令行启动测试用例:

phpunit  测试文件名,此处为要测试ArrayTest.php文件

phpunit ArrayTest.php

PHPUnit 5.7.5 by Sebastian Bergmann and contributors.

.. 2 / 2 (100%)

Time: 138 ms, Memory: 3.25MB

OK (2 tests, 4 assertions)

记录测试日志:

日志多种格式:http://www.phpunit.cn/manual/5.7/zh_cn/textui.html#textui.clioptions

phpunit ArrayTest.php --log-tap log.txt

TAP version 13ok 1 - ArrayTest::testArrayIsEmptyok 2 - ArrayTest::testarrayHasKey1..2

四、PHPUnit测试代码覆盖率

可以参考:http://www.phpunit.cn/manual/current/zh_cn/code-coverage-analysis.html

可以通过配置phpunit.xml设置需要测试的代码路径或文件

例如:phpunit.xml的配置(放在项目根目录)

1、通过生成html页面查看代码覆盖率

通过执行命令:phpunit --coverage-html ./coverage ./src/test

命令解释:

  • --coverage-html:生成覆盖率结果的html
  • coverage:html生成目录,可以重新定义
  • ./src/test:测试用例目录(也可以是单个测试用例文件)

覆盖率结果:

可以看到目录里每个文件的覆盖率:

还可以清晰的看到每一个文件代码覆盖率:

2、通过生成的text文件查看代码覆盖率

通过执行命令:phpunit --coverage-text ./src/test > test.log

命令解释:

  • --coverage-html:生成覆盖率结果的text
  • ./src/test:测试用例目录(也可以是单个测试用例文件)
  • > test.log:存放覆盖率结果的文件(文件名称自己定义)

覆盖率结果:

可以清晰的看到总覆盖率和每个文件的覆盖率。

覆盖率计算问题:

1、类:只有类中所有代码都执行了,覆盖率才为100%;

2、方法:类中的方法每一行都执行了,覆盖率才算100%。例如:类中有5个方法,有两个方法每一行执行了,覆盖率为:40%;

3、行:每一行代码都执行了就是100%;

参考:PHPUnit简介及使用 - 浮.尘 - 博客园
https://www.cnblogs.com/kccdzz/p/6763735.html

三、第一次用 PHPUnit 写测试就上手

一、什么是测试?测试的重要性?

开发者在撰写程式的时候,程式不大可能会没有问题,所以通常就需要验证程式的执行是不是符合预期。测试程式能用来验证程式程式的运作是不是正常的,并发现程式中的错误,以增加软体品质。

下面是一个活动报名的系统:

这一个活动报名系统主要提供使用者报名活动,在报名活动内还有一些子功能,像是「限制活动报名人数」,如果是这一个子功能,该如何测试呢?

直觉想到可能就需要有 20 个以上的使用者,然后让这个些使用者分别来报名活动,如果没超过限制的人数,使用者就能继续报名,反之,超过了限制人数的话,使用者就无法继续报名了。说到这里,会觉得这是什么测试!

先分析一下,照上面的方法进行测试会有什么问题:

1.测试案例一多,会花太多时间
这时候,如果再增加报名截止日期的测试,这样又需要再对报名功能测试一次。

2.改了程式码之后,需要再做一次测试
日后维护时,会需要再次修改程式码,但是,改了程式码之后,该如何验证修改后的程式运作上是没问题的?所以,可能又要再次从头做一次测试。

3.与其他程式混在一起测试
要执行报名功能的程式码,要透过 view 的程式去呼叫。但是,这样做测试的时候,如果测试失败,就必须花时间去找出是报名的程式出问题,还是 view 程式。

那该如何解决这些问题呢?针对开发者来说,需要一个可以自动化、重复的、独立的测试。

二、单元测试

单元测试是分别对程式的单元,例如:函式 (function)、方法 (method),进行测试,测试时会判断单元的执行结果是不是有符合预期。

从上图可以看到,撰写了Event 类别提供了两个方法,reserve()、unreserve(),也就是目标程式。
接着透过 EventTest 的两个测试案例,testReserve() 与 testUnreserve() 分别来对 Event 类别中的两个类别方法执行测试,测试的结果会在测试案例中验证,如果验证通过,表示测试就成功了!

单元测试能协助开发者什么?

1.确保单元的执行结果
这一点蛮觉得就可以了解到,单元测试能协助验证目标程式的执行结果。

2.尽早发现程式中的错误
因为单元测试是在开发的时候就进行的,所以能发现程式中存在的问题。
没使用单元测试的时候,写好了一份程式,但是,这份程式码需要与其他程式码整合才有办法运作。所以就需要等整个程式开发的差不多的时候,才能对程式进行测试,在测试出现问题的时候,会花许多时间来厘清是那一份程式导致的问题。
如果使用单元测试,就能在写好了一份程式之后进行单元测试,而不用等到之后才对程式测试。

3.修改程式,更加有信心
程式写好了,需要维护、修 bug,如果修改了程式码后,能确定修改后的程式与之前的正常运作是一样的吗?单元测试能协助修改程式后,对程式执行测试,如果测试过了,表示程式的运作是正常的,测试失败的话,可能需要再回头修改程式。

4.测试即文件
在撰写测试的时候,会对单元所提供的功能进行验证,所以,除了能透过程式来了解单元的运作外,也能用所撰写的单元测试来知道,被测试的单元有哪些运作及功能。
在开发的时候,会撰写一些文件来作为软体的文件,在实际上,有时候那些文件并不一定会随着程式变更而修改,到后来会变成之前所做的文件跟程式是不同步的。
因为,单元测试的程式会对目标程式进行验证,所以,测试能避免掉传统文件所造成的程式与文件不同步的问题。

三、简介 PHPUnit

PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,PHPUnit 是参考 xUnit 架构利用 PHP 实作出来。

为什么要使用 PHPUnit 来测试呢?虽然,要做单元测试可以自己写程式来测试, 但是 PHPUnit 提供了一些测试时常用的 library 及解决测试时会遇到问题的方法,所以我们会使用 PHPUnit 来做单元测试。

参考:第一次用 PHPUnit 写测试就上手(上) - Anlior的博客 - CSDN博客
https://blog.csdn.net/Anlior/article/details/78627134?locationNum=7&fps=1

四、Tp5 单元测试

先安装composer,如之前电脑环境有安装composer可跳过12步骤

1.打开php.ini,找到;extension=php_openssl.dll,去掉前面的分号,保存并重启Apache即可。

2.百度搜索安装Composer-Setup.exe

3.打开Git Bash

4.

5.安装完成后项目目录会多出一个tests文件夹

6.

7.单元测试方法,模型

8.结果显示返回正确情况

返回错误情况

测试函数,更多测试请看帮助文档

assertTrue 为判断是否真
assertFalse 为判断是否假
assertGreaterThan为判断是否大于
assertLessThanOrEqual判断是否小于或等于
assertEquals为判断是否相等

tp5单元测试使用帮助文档http://www.kancloud.cn/manual/thinkphp5/182511

参考:Tp5 单元测试 - liuxin_0725的专栏 - CSDN博客
https://blog.csdn.net/liuxin_0725/article/details/53215411

五、thinkphp5单元测试安装及使用

1、安装:命令行根目录下运行安装代码

这后面或许不应该加 v1.0

扩展里面的phpunit

安装前后扩展目录vendor对比:

快速入门 · thinkphp单元测试手册|thinkphp 单元测试|thinkphp 测试 · 看云
https://www.kancloud.cn/code7/tpunit/220874

PHPUnit简介及使用(thinkphp5的单元测试安装及使用)相关推荐

  1. php单元测试工具入门,PHPUnit 单元测试安装与使用入门教程

    本文实例讲述了PHPUnit 单元测试安装与使用.分享给大家供大家参考,具体如下: 一.官网下载对应 PHP 版本的代码库 二.安装 PHPUnit 官网提供了两种方法安装 1. PHP Archiv ...

  2. 《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis

    文章目录 8.Docker常规安装简介 8.1 docker常规安装总体步骤 8.2安装tomcat 8.3 安装mysql 8.3.1 docker hub上面查找mysql镜像 8.3.2 从do ...

  3. PHP:ThinkPHP5.0下载安装和各种配置

    1.ThinkPHP5.0简介 composer包管理工具 ThinkPHP3.0不兼容 php环境: 测试 开发 线上 url路由 请求响应 模板视图 MVC 一种设计典范 分离 model 模型 ...

  4. Redis(1) 简介以及linux环境下的安装

    一.简介 Redis是个啥?它是一个key-value型的数据库,它是一个内存性的数据库,数据大量放在内存中,所以速度非常快,快到可以用来当缓存.当然它也有持久化的功能,可以把数据以文件的形式存在硬盘 ...

  5. snort简介以及在Ubuntu下的安装

    一.简介 Snort是一套开放源代码的网络入侵预防软件与网络入侵检测软件.Snort使用了以侦测签章(signature-based)与通信协议的侦测方法.Snort是一个免费的IDS(入侵监测系统) ...

  6. python3.7版本简介_python3.7.2各平台安装简介

    python3.7.2各平台安装简介 Python官网:https://www.python.org/ Python文档下载地址:https://www.python.org/doc/ Unix &a ...

  7. docker简介及使用国内镜像源安装docker

    一.docker简介 docker是一种轻量级虚拟化技术,它基于Linux Container,使用AUFS,(Union File System),是dotCloud公司提供的一种跨平台.可移植的容 ...

  8. Doris(一)-简介、架构、编译、安装和数据表的基本使用

    目录 1.Doris简介 2.Doris网址 3.Doris架构 3.编译和安装 3.1.软硬件需求 3.2.编译 3.2.1.安装Docker环境 3.2.2.使用Docker 开发镜像编译 3.3 ...

  9. 【Storm】Storm简介及Storm集群的安装部署

    1.Storm概述 (1)Storm简介 Storm最早是由BackType公司开发的实时处理系统,底层由Clojure实现.Clojure也是一门基于JVM的高级面向函数式的编程语言.2011年Tw ...

最新文章

  1. Enterprise Library 企业库 向Oracle数据库中 写日志的 存储过程
  2. 骚操作!用铁丝做“电路”,不服不行!
  3. vs2015无法打开包括文件:“winapifamily.h”
  4. Qt工作笔记-自定义模型【继承QAbstractTableModel】
  5. Linux makefile教程之函数七[转]
  6. 点击按钮返回上一个页面_零基础跟老陈一起学WordPress 《第四课》用WP半小时建一个商业网站...
  7. 想考华为HCIA,但不知道选择什么方向,点进来~
  8. PTA不变初心数(17分)简单答案版
  9. 免杀技术有一套(免杀方法大集结)(Anti-AntiVirus)
  10. Inversion of Java Interview - 计算机网络篇
  11. h200和gr1108_华三H3C GR1108-P 路由器性能极限
  12. 软件工程实践总结(个人)
  13. 中小企业管理升级的焦点——企业资源管理系统(ERP)
  14. (一)Activiti 数据库25张表——流程历史记录表25(ACT_EVT_LOG)
  15. 使用python将数据导出到表格中
  16. linux配置4g网络命令_【树莓派】树莓派移动网络连接(配置4G网卡)
  17. PS(2018)更换启动界面
  18. 硕士毕业论文参考文献整理、插入以及各种相关心得(限武汉大学EndNote软件)
  19. Linux ora-12514多实例,ORA-12514问题解决
  20. lr_convert_string_encoding: 对中文进行UTF-8转码

热门文章

  1. Android中的消息机制
  2. java基础(六章)
  3. linux中shell变量$#,$@,$0,$1,$2的含义解释(转)
  4. shiro +spring + spring mvc+ mybatis整合【转】
  5. 创维37K05HR黑屏有声音故障维修
  6. Markdown 五分钟速成
  7. win7+eclipse用maven构建hadoop项目注意事项
  8. GreenPlum的并行查询优化策略
  9. 不常用≠没用 Win7容易忽略的四个功能
  10. IPv6域名解析服务基础