官网地址:https://phpunit.de/getting-started-with-phpunit.htmlphp
一、能够经过命令操控测试脚本html
二、能够测试性能java
三、能够测试代码覆盖率thinkphp
四、能够自动化的更新测试用例的参数数据api
五、各类格式的日志数组
Codemarkdown
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', $email ) ); } } }
Test Code并发
tests/EmailTest.php
app
<?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') ); } }
a、测试的代码是在test文件夹下的,和源码不是在同一个文件夹下
b、测试的类或者方法都加有test字样
c、有一些经常使用的测试函数,好比:
assertTrue 为判断是否真
assertFalse 为判断是否假
assertGreaterThan为判断是否大于
assertLessThanOrEqual判断是否小于或等于
assertEquals为判断是否相等
thinkphp的开发手册的杂项里面有教怎么使用单元测试,
thinkphp5的单元测试也是用的phpunit,这张图能够说明
因此关于单元测试的具体方法能够去phpunit官方文档里面看
咱们能够直接在命令行下面运行单元测试
看tp的根目录下是否有tests文件夹
在开发手册的评论下找到的
快速入门 · thinkphp单元测试手册|thinkphp 单元测试|thinkphp 测试 · 看云
https://www.kancloud.cn/code7/tpunit/220874
一、它是一款轻量级的PHP测试框架,地址:http://www.phpunit.cn
二、手册:http://www.phpunit.cn/manual/5.7/zh_cn/installation.html
一、能够经过命令操控测试脚本
二、能够测试性能
三、能够测试代码覆盖率
四、能够自动化的更新测试用例的参数数据
五、各类格式的日志
一、 通常被测试类的后面加上”Test”,好比要测试的类为Array,则测试用例的命名为ArrayTest。
二、测试类ArrayTest继承于PHPUnit_Framework_TestCase
三、测试方法必须为public权限,都是test开头,或者你也能够选择给其加注释@test来代表该函数为测试函数
四、经过断言方法来对实际值和预期值进行断言,断言方法能够参照手册: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 |
能够参考:http://www.phpunit.cn/manual/current/zh_cn/code-coverage-analysis.html
能够经过配置phpunit.xml设置须要测试的代码路径或文件
例如:phpunit.xml的配置(放在项目根目录)
一、经过生成html页面查看代码覆盖率
经过执行命令:phpunit --coverage-html ./coverage ./src/test
命令解释:
覆盖率结果:
能够看到目录里每一个文件的覆盖率:
还能够清晰的看到每个文件代码覆盖率:
二、经过生成的text文件查看代码覆盖率
经过执行命令:phpunit --coverage-text ./src/test > test.log
命令解释:
覆盖率结果:
能够清晰的看到总覆盖率和每一个文件的覆盖率。
覆盖率计算问题:
一、类:只有类中全部代码都执行了,覆盖率才为100%;
二、方法:类中的方法每一行都执行了,覆盖率才算100%。例如:类中有5个方法,有两个方法每一行执行了,覆盖率为:40%;
三、行:每一行代码都执行了就是100%;
参考:PHPUnit简介及使用 - 浮.尘 - 博客园
https://www.cnblogs.com/kccdzz/p/6763735.html
1、什么是测试?测试的重要性?
开发者在撰写程式的时候,程式不大可能会没有问题,因此一般就须要验证程式的执行是否是符合预期。测试程式能用来验证程式程式的运做是否是正常的,并发现程式中的错误,以增长软体品质。
下面是一个活动报名的系统:
这一个活动报名系统主要提供使用者报名活动,在报名活动内还有一些子功能,像是「限制活动报名人数」,若是是这一个子功能,该如何测试呢?
直觉想到可能就须要有 20 个以上的使用者,而后让这个些使用者分别来报名活动,若是没超过限制的人数,使用者就能继续报名,反之,超过了限制人数的话,使用者就没法继续报名了。说到这里,会以为这是什么测试!
先分析一下,照上面的方法进行测试会有什么问题:
1.测试案例一多,会花太多时间
这时候,若是再增长报名截止日期的测试,这样又须要再对报名功能测试一次。
2.改了程式码以后,须要再作一次测试
往后维护时,会须要再次修改程式码,可是,改了程式码以后,该如何验证修改后的程式运做上是没问题的?因此,可能又要再次从头作一次测试。
3.与其余程式混在一块儿测试
要执行报名功能的程式码,要透过 view 的程式去呼叫。可是,这样作测试的时候,若是测试失败,就必须花时间去找出是报名的程式出问题,仍是 view 程式。
那该如何解决这些问题呢?针对开发者来讲,须要一个能够自动化、重复的、独立的测试。
2、单元测试
单元测试是分别对程式的单元,例如:函式 (function)、方法 (method),进行测试,测试时会判断单元的执行结果是否是有符合预期。
从上图能够看到,撰写了Event 类别提供了两个方法,reserve()、unreserve(),也就是目标程式。
接着透过 EventTest 的两个测试案例,testReserve() 与 testUnreserve() 分别来对 Event 类别中的两个类别方法执行测试,测试的结果会在测试案例中验证,若是验证经过,表示测试就成功了!
单元测试能协助开发者什么?
1.确保单元的执行结果
这一点蛮以为就能够了解到,单元测试能协助验证目标程式的执行结果。
2.尽早发现程式中的错误
由于单元测试是在开发的时候就进行的,因此能发现程式中存在的问题。
没使用单元测试的时候,写好了一份程式,可是,这份程式码须要与其余程式码整合才有办法运做。因此就须要等整个程式开发的差很少的时候,才能对程式进行测试,在测试出现问题的时候,会花许多时间来厘清是那一份程式致使的问题。
若是使用单元测试,就能在写好了一份程式以后进行单元测试,而不用等到以后才对程式测试。
3.修改程式,更加有信心
程式写好了,须要维护、修 bug,若是修改了程式码后,能肯定修改后的程式与以前的正常运做是同样的吗?单元测试能协助修改程式后,对程式执行测试,若是测试过了,表示程式的运做是正常的,测试失败的话,可能须要再回头修改程式。
4.测试即文件
在撰写测试的时候,会对单元所提供的功能进行验证,因此,除了能透过程式来了解单元的运做外,也能用所撰写的单元测试来知道,被测试的单元有哪些运做及功能。
在开发的时候,会撰写一些文件来做为软体的文件,在实际上,有时候那些文件并不必定会随着程式变动而修改,到后来会变成以前所作的文件跟程式是不一样步的。
由于,单元测试的程式会对目标程式进行验证,因此,测试能避免掉传统文件所形成的程式与文件不一样步的问题。
3、简介 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
先安装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
这后面或许不该该加 v1.0
扩展里面的phpunit
安装先后扩展目录vendor对比:
快速入门 · thinkphp单元测试手册|thinkphp 单元测试|thinkphp 测试 · 看云https://www.kancloud.cn/code7/tpunit/220874