php单元测试phpunit入门实例教程
发布:smiling 来源: PHP粉丝网 添加日期:2018-10-10 22:23:11 浏览: 评论:0
这篇文章提供了一些phpunit官方教程没有提到的信息,帮助初学者快速了解php单元测试,在phpunit官网提供了详细的中文教程,可选多种格式下载.
phpunit官网地址:https://phpunit.de/
何为单元测试:
指对软件中的基本单元进行测试,如函数、方法等,以检查其返回值或行为是否符合预期;实际中软件是很复杂的,由许多组件构成,执行流程连贯在一起,要进行单元片段的测试,就需要为其提供执行上下文(或者说参数)和环境(比如打桩模拟一些对象)来运行,并监控其行为和返回值,为此我们就需要写出做这件事情的程序代码,这样的代码叫做测试用例,许多测试用例有机结合在一起形成一个整体的测试,又叫做测试套件,被测试的程序代码叫做生产代码。phpunit这个软件就是用来帮助我们写测试用例并进行测试的。
php的单元测试:phpunit
在其官网有详细教程,这里介绍一些补充内容。
首先要明白phpunit软件本身就是由php语言实现,其使用是通过命令行进行的,并不是通过浏览器访问
明白这一点很重要,许多新人被卡在这里。很基础也很简单,但似乎没怎么被提及
在官网下载后得到一个phar文件,关于phar归档文件的介绍可参见前面一篇文章PHP开发之归档格式phar文件概念与用法
请同时下载phpunit使用文档,按照里面的安装方法进行安装,之后在命令行输入以下命令:
phpunit --help
如果显示出了帮助信息即安装成功,在命令行当前目录下建立一个测试用例为yunke.php,内容如下:
- <?php
- use 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));
- } //phpfensi.com
- }
- ?>
然后在命令行输入以下命令:
phpunit yunke
显示如下内容:
- PHPUnit 5.7.12 by Sebastian Bergmann and contributors.
- . 1 / 1 (100%)
- Time: 159 ms, Memory: 7.00MB
- OK (1 test, 5 assertions)
恭喜,你已经成功运行了一个单元测试,第一行是作者信息(Sebastian Bergmann这个家伙很喜欢署名啊)
第二行以一个句点开始,表示所有测试成功通过
你可能会疑惑,上面的php代码是怎么回事呢?
那就是一个测试用例,简单的测试了一个数组操作,进行单元测试一般通过以下四步:
1. 针对生产代码类 Class 的测试写在类 ClassTest中。
2. ClassTest(通常)继承自 PHPUnitFrameworkTestCase。
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类哪里来的了吧
通过以上内容再配合官网文档,新手应该可以顺利入门了
Tags: 实例 单元 教程
相关文章
- ·用实例分析PHP5异常处理(2013-11-13)
- ·两款php导出excel实例(2013-12-16)
- ·php 实现jquery+ajax 跨域数据调用实例(2014-01-03)
- ·PHP JSON数据处理实例程序用法(2014-01-06)
- ·php中cookie实现二级域名可访问操作实例(2014-01-07)
- ·PHP curl 获取响应的状态实例(2014-01-08)
- ·PHP Curl多线程实现原理与实例详解(2014-01-09)
- ·php 通过curl post发送json数据实例(2014-01-10)
- ·php中设计模式工厂模式和单例模式实例(2014-01-16)
- ·PHP多进程编程实例说明(2014-01-17)
- ·PHP socket模拟POST请求实例(2014-01-18)
- ·phpmailer 发送邮件实例代码(2014-01-21)
- ·在apache 下建立高可扩展的web邮件系统实例(2014-01-21)
- ·php fsockopen邮箱发送实例代码(2014-01-22)
- ·PHPMailer邮件发送实例与问题总结(2014-01-25)
- ·php 中javascript调用js实例方法(2014-05-30)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)