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程序设计有所帮助。

(0)

相关推荐

  • Windows下安装PHP单元测试环境PHPUnit图文教程

    1.按照常规下载 php 的zip包和配置好 php.ini,这里的例子使用的是 E:\php 2.把你的 php 目录加入系统环境变量 path 中 3.开始 运行 输入 cmd,然后切换到你的 php 目录,我当前的就是 E:\php 4.输入 go-pear.bat 首先脚本会询问是把 pear 安装为系统范围的还是本地拷贝,这里我们默认选择系统,直接回车即可 5.这时显示当前的路径配置,并询问你是否修改,我们保持默认依然回车即可,回车后脚本就会开始自动安装 pear 库了 6.安装的时候

  • php安装xdebug/php安装pear/phpunit详解步骤(图)

    首先,本文是基于wamp环境的基础上的,所以,如果您看到这里还没有搭建好wamp环境的话,介意您先把环境搭建好,因为这里都是一些实践性的内容. 1.准备 wamp环境中,我使用的各个软件的版本如下 windows 2003 Standard Edition SP2 apache HTTP Server 2.3 mysql  5.1.49 php 5.4.5 以上环境的搭建我就不赘述了,网上资料很多,通常也不会出现什么错误,但是如果您使用windows 7来部署的话,注意一下权限的问题就好了,所有

  • PHP单元测试利器 PHPUNIT深入用法(三)第1/2页

    在本文中,笔者将为大家介绍phpunit中的两个高级概念和用法,尽管它不一定在你的日常单元测试中都用到,但理解和学会它们的用法对学习phpunit还是十分重要的. Phpunit中的Annotations 如果有其他编程语言经验的开发者,应该对Annotations(注解)不陌生,其实在phpunit中,一个简单的如下面的一段注释也可以认为是Annotations: #div_code img{border:0px;} <?phpclass MyTestClass extends PHPUnit

  • windows下安装pear及phpunit(注意配置好php命令行环境)

    安装环境 在安装PEAR之前需要配置安装PHP环境,如果没有自带PEAR (直接访问http://go-pear.org并保存其首页为go-pear.php) PEAR安装准备 如果PHP运行环境没有自带PEAR,则需要下载go-pear.php文件,同时保存在php.exe所在的目录下. PEAR安装步骤 1.我这里用的是wamp集成环境,d:\wamp\bin\php\php5.2.5>go-pear,开始自动安装. 通过这个PEAR安装截图,可以看到首先需要确认PEAR的安装目录结构,系统

  • PHP单元测试利器 PHPUNIT深入用法(二)第1/2页

    1.markTestSkipped和markTestIncomplete 在phpunit中,有两个有用的方法markTestSkipped和markTestIncomplete.它们能允许你编写的单元测试中不单是只有通过和失败两种结果.markTestSkipped能让PHPUNIT不去执行某个已经编写好的测试方法.举个例子说明,比如下面的程序: #div_code img{border:0px;} <?phppublic function testThisMightHaveADb(){  $

  • PHP单元测试利器 PHPUNIT初探第1/2页

    当你遇到以上这些令你沮丧的情况时,你一定会想能有什么更好的办法去解决呢?办法当然是有的!这就是使用单元测试.单元测试不但可以在一定程度上解决上述头疼的问题,而且能让代码变的容易维护,还可以能让你更多地对代码进行重构. 一旦你编写好单元测试用例,当你需要修改你的代码时,你要做的事情就是重新运行你的单元测试用例并观察这些单元测试用例能否通过,如果通过了的话,证明代码是没问题的. 人们往往会说:既然单元测试这么好,为什么那么多人还是不大愿意去写单元测试呢?有以下几种理解上的误曲: 1.认为编写单元测试

  • laravel单元测试之phpUnit中old()函数报错解决

    前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问题,但是在phpUnit中就报错 错误原因: exception 'RuntimeException' with message 'Session store not set on request.' in /Users/lei/Sites/goodstyle/vendor/laravel/framework/src/Illuminate/Http/Request.php:

  • Yii 连接、修改 MySQL 数据库及phpunit 测试连接

    >>>database<<< 1. 修改 protected/config/main.php 去掉mysql数据库连接方式的注释,并且修改用户名,密码以及连接的数据库. 2. 新建 protected/tests/unit/DbTest.php 内容如下: <?php class DbTest extends CTestCase { public function testConnection() { $this->assertNotEquals(NULL,

  • pear包安装phpunit的方法

    PHPUnit可以通过PHP扩展和程序库(PEAE)获得. PEAR是可重用PHP组件的框架和分发系统. 安装PHPUnit可以通过PEAR安装程序命令获得: pear install PHPUnit2 根据PEAR的版本命名标准,适用于PHP5的PHPUnit包称为PHPUnit2. PHPUnit是适用于PHP4的包,这在本书后面关于"在PHP4中使用PHPUnit"一章会提到. 安装只有,能够在本地的PEAR目录中找到PHPUnit的源代码,路径通常是/usr/lib/ php/

  • PHPUnit安装及使用示例

    PHPUnit是zend官方大力支持的测试框架,高质量的单元测试时保证项目质量的基础,能够有效的减少BUG,改善程序. 安装PHPUnit: 在php的目录下: 复制代码 代码如下: pear channel-discover pear; pear install phpunit/PHPUnit windows下将php的环境变量加入到PATH环境变量中. 简单使用: 复制代码 代码如下: <?php class StackTest extends PHPUnit_Framework_TestC

随机推荐