php单元测试phpunit入门实例教程

 更新时间:2017年11月17日 12:04:46   作者:云客2009  
这篇文章主要介绍了php单元测试phpunit,结合实例形式分析了php单元测试phpunit的基本概念、使用方法及相关注意事项,需要的朋友可以参考下

本文实例讲述了php单元测试phpunit。分享给大家供大家参考,具体如下:

这篇文章提供了一些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));
  }
}
?>

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

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(通常)继承自 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相关内容感兴趣的读者可查看本站专题:《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • 关于PHP内存溢出的原因和解决方法

    关于PHP内存溢出的原因和解决方法

    PHP内存溢出指的是在PHP应用程序中,分配给脚本执行的内存超出了PHP配置文件中设置的限制,当脚本尝试使用比可用内存更多的内存时,就会发生内存溢出错误,本文给大家介绍了PHP内存溢出的原因及解决方法,需要的朋友可以参考下
    2023-12-12
  • PHP垃圾回收机制引用计数器概念分析

    PHP垃圾回收机制引用计数器概念分析

    php变量存在一个叫"zval"的变量容器中,"zval"变量容器包括含变量的类型和值,还包括额外的两个字节信息,分别是“is_ref”表示变量是否属于引用,“refcount”指向这个zval变量容器的变量个数
    2013-06-06
  • CMS中PHP判断系统是否已经安装的方法示例

    CMS中PHP判断系统是否已经安装的方法示例

    这篇文章主要介绍了CMS中PHP判断系统是否已经安装的方法示例,需要的朋友可以参考下
    2014-07-07
  • PHP 线程安全与非线程安全版本的区别深入解析

    PHP 线程安全与非线程安全版本的区别深入解析

    Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍
    2013-08-08
  • PHP中将数组转成XML格式的实现代码

    PHP中将数组转成XML格式的实现代码

    网上找的一段代码! 然后我自己根据php DOMDocument又写了一段代码,需要的朋友可以参考下。
    2011-08-08
  • 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数

    约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数

    约瑟夫环问题相信大家都已经很熟悉了,一直想使用 PHP 来实现一下,琢磨了老半天的时间终于弄出来了,也许没有网上的一些代码实现的简洁高效,但是毕竟是写出来了~呵呵。
    2010-10-10
  • PHP备份/还原MySQL数据库的代码

    PHP备份/还原MySQL数据库的代码

    之前是采用PHP读取数据库结构和内容,然后写文件,这样可能会导致导出的文件不一定能百分百导入到MySQL中去,想想之后采用MySQL自带的导入导出命令最保险
    2011-01-01
  • php文件上传类完整实例

    php文件上传类完整实例

    这篇文章主要介绍了php文件上传类,结合完整实例形式分析了php上传文件的类型判断、大小计算机限制等技巧,需要的朋友可以参考下
    2016-05-05
  • PHP实现的简单组词算法示例

    PHP实现的简单组词算法示例

    这篇文章主要介绍了PHP实现的简单组词算法,涉及php针对字符串的遍历、递归、组合、运算等相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • PHP实现的方程求解示例分析

    PHP实现的方程求解示例分析

    这篇文章主要介绍了PHP实现的方程求解,结合具体实例形式较为详细的分析了针对具体需求使用php进行方程求解的实现技巧,需要的朋友可以参考下
    2016-11-11

最新评论