PHPUnit简介及使用(thinkphp5的单元测试安装及使用)
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
<?php
final class Email
{
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 new InvalidArgumentException(
sprintf(
'"%s" is not a valid email address',
)
);
}
}
}
Test Code
tests/EmailTest.php
<?php
use PHPUnit\Framework\TestCase; final class EmailTest extends TestCase
{
public function testCanBeCreatedFromValidEmailAddress()
{
$this->assertInstanceOf(
Email::class,
Email::fromString('user@example.com')
);
} public function testCannotBeCreatedFromInvalidEmailAddress()
{
$this->expectException(InvalidArgumentException::class); Email::fromString('invalid');
} public function testCanBeUsedAsString()
{
$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 //测试用例运行后执行 // 断言数组$fixture中元素的数目是0。 } |
命令行启动测试用例:
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 13 |
四、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可跳过1,2步骤
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的单元测试安装及使用)的更多相关文章
- ThinkPHP5.0的安装
ThinkPHP5.0的安装很简单: 1.下载“phpstudy”安装 2.下载thinkphp源文件 3.把thinkphp源文件解压并放到phpstudy目录下的“WWW”目录 4.然后开启服务并 ...
- Python单元测试简介及Django中的单元测试
Python单元测试简介及Django中的单元测试 单元测试负责对最小的软件设计单元(模块)进行验证,unittest是Python自带的单元测试框架. 单元测试与功能测试都是日常开发中必不可少的部分 ...
- snort简介以及在Ubuntu下的安装
一.简介 Snort是一套开放源代码的网络入侵预防软件与网络入侵检测软件.Snort使用了以侦测签章(signature-based)与通信协议的侦测方法.Snort是一个免费的IDS(入侵监测系统) ...
- Redis简介以及如何在Windows上安装Redis
Redis简介 Redis是一个速度非常快的非关系型内存数据库. Redis提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erla ...
- JavaFX简介和Scene Builder工具的安装使用简易教程
JavaFX概述和简介 富互联网应用是那些提供与Web应用程序类似的功能,并可作为桌面应用程序体验的应用.与用户的正常网络应用程序相比,它们提供更好的视觉体验.这些应用程序可作为浏览器插件或作为虚拟机 ...
- MySQL高级学习笔记(一):mysql简介、mysq linux版的安装(mysql 5.5)
文章目录 MySQL简介 概述 mysql高手是怎样炼成的 mysq linux版的安装(mysql 5.5) 下载地址 拷贝&解压缩 检查工作 检查当前系统是否安装过mysql 检查/tmp ...
- 3分钟wamp中php安装 pear 然而并没有用 并没能借此安装phpunit 不得不借用了其他的方式安装phpunit
15:42 2015/11/233分钟wamp中php安装 pear环境介绍:windows10,wamp2.5(推荐博客的博主是win7,所以系统应该不是问题)注意:在过程中要输入一次 yes,不要 ...
- Redis简介及3.0.2编译安装
由于项目需要Redis作为内存数据库,所以也开始搞Redis~ Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).l ...
- PHPUnit简介及使用
一.PHPUnit是什么? 1.它是一款轻量级的PHP测试框架,地址:http://www.phpunit.cn 2.手册:http://www.phpunit.cn/manual/5.7/zh_cn ...
随机推荐
- js获取元素的外链样式
一般给元素设置行内样式,如<div id="div1" style="width:500px;"></div>.如要获取它的样式,即可d ...
- 170619、springboot编程之HelloWorld
springboot资料看了一段时间了,个人觉得开发效率相当高,也参考了网上很多大牛的技术博客,在这里面我也记录一下,方便以后自己翻阅查看,同时也给新手最一点点指引.如果有侵权大牛博客文章,请告诉我, ...
- codeforces#505--C Plasticine Zebra
C. Plasticine zebra time limit per test 1 second memory limit per test 256 megabytes input standard ...
- jQuery change事件
定义和用法 当元素的值发生改变时,会发生 change 事件. 该事件仅适用于文本域(text field),以及 textarea 和 select 元素. change() 函数触发 change ...
- 广通软件获“2016年度中国最具影响力IT运维管理软件提供商”殊荣
12月16日,“科技原力觉醒引领创新巅峰”-- 2016创新影响力年会暨国家产业服务平台•2016年终评活动在北京裕龙国际酒店落下帷幕. 本活动在主管部门的指导参与下,总结本年度技术成果并籍此对未来科 ...
- rpc、socket、mq
关于RPC与MQ异同的理解 相同:1.都利于大型系统的解耦:2.都提供子系统之间的交互,特别是异构子系统(如java\node等不同开发语言):不同:1.RPC侧重功能调用,因此多半是同步的:备注:也 ...
- request对象的常用属性和方法
request的属性 /* 1.HttpRequest.GET 一个类似于字典的对象,包含 HTTP GET 的所有参数.详情请参考 QueryDict 对象. 2.HttpRequest.POST ...
- MySQL新加用户和开启慢查询
mysql>grant select on *.* to read@'%' identified by 'j'; //给予read用户只读全部库的权限 mysql>grant selec ...
- 【Lua】面向对象编程(一)
类和对象: account.lua module(...,package.seeall) Account={balance=} Account.new=function(self,o) local ...
- VirtualXposed查看手机端网页及调试
参考博客: https://sspai.com/post/44447 以下是实际动手操作步骤: 一 打开手机开发者模式 二 允许USB调试 三 安装 VirtualXposed_1.apk ...