本文地址

分享提纲:

  1.概述

  2.安装

  3.编写第一个测试用例

  4.PHPUnit高级

  5.参考

1.概述

  1)【测试框架】

  它是一款轻量级的PHP测试框架,是一个xUnit的体系结构的单元测试框架。复杂的项目,通过单元测试能够快速排查bug,有效减少bug的产生。简单的项目,使用php自带的var_dump()print_r()也能很方便的调试bug。PHPUnit通过运行测试用例里的断言(例如判断返回结果不为空),检查代码是否符合预期。

  

2.安装

  安装方式有两种。一种是使用phar包,一种是使用Composer。

  mac下的安装请参考 http://blog.csdn.net/u013166311/article/details/52622560

  (可以下载低版本的phpunit wget https://phar.phpunit.de/phpunit-4.0.14.phar

于是打开终端,先pear version 验证是否安装了pear。

如果没有安装$sudo PHP /usr/lib/php/install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin

用$ pear version检测安装成功

$ sudo pear upgrade-all  更新。

最后用以下命令安装成功:

$ wget https://phar.phpunit.de/phpunit-4.0.14.phar

$ chmod +x phpunit.phar

$ sudo mv phpunit.phar /usr/local/bin/phpunit

mac下安装

  2.1)使用phar包
    最新版的稳定版phar包是5.7,下载地址 https://phar.phpunit.de/phpunit.phar

    phar5.7发布于2016年12月2日,于2018年2月2日结束支持。

    PHPUnit 5.7 支持 PHP 5.6, PHP 7.0, 和 PHP 7.1。

    注意:PHP的版本比较低,可以下载低版本的 phpunit,例如 wget https://phar.phpunit.de/phpunit-4.0.14.phar

    运行方法:

# 通用
php phpunit.phar --version # linux
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit
phpunit --version

 

  可以查看版本号。

  2.2)使用Composer
    如果用 Composer 来管理项目的依赖关系,只要在项目的composer.json 文件中简单地加上对 phpunit/phpunit 的依赖关系即可。下面是一个最小化的  composer.json 文件的例子,只定义了一个对 PHPUnit 5.7 的开发时依赖:

{
"require-dev": {
"phpunit/phpunit": "5.5.*"
}
}

  要通过 Composer 完成系统级的安装,可以运行:

composer global require "phpunit/phpunit=5.5.*"

  请确保 path 变量中包含有 ~/.composer/vendor/bin/

3.编写第一个测试用例

3.1)新建文件夹Testcase,编写SayHello.php:

<?php

class SayHello{

    public function printHello(){
echo 'Hello';
return 'Hello'; }
}
?>

SayHello.php

3.2)新建测试用例SayHelloTest.php
<?php

require_once 'SayHello.php';

class SayHelloTest extends PHPUnit_Framework_TestCase {

    public function setUp(){ }

    public function tearDown(){ }

    public function testConnectionIsValid(){
$hi = new SayHello();
$this->assertTrue($hi->printHello() == 'Hello');
} }

SayHelloTest.php

 
编写完成后,切换到phpunit.phar所在目录命令行执行:
$ php phpunit.phar Testcase/SayHelloTest.php

  输出结果:

PHPUnit 5.7.4 by Sebastian Bergmann and contributors.

.                                                                  1 / 1 (100%)Hello

Time: 130 ms, Memory: 10.00MB

OK (1 test, 1 assertion)
结果表明:

  测试通过,1个测试方法,1个断言,没有失败。

  这里注意的是:
    1、所有以Test结尾的类均为测试用例;
    2、所有以test开头的方法均是测试方法,会自动运行;
    3、setUp是每个测试用例最先运行的方法,tearDown是每个测试用例最后运行的方法;
    4、assertTrue用于判断结果是否为true。

 

4.PHPUnit高级

  4.1) 模拟对象MOCK

    -- mock的深层次原理是什么?
      类PHPUnit_Framework_MockObject_Generator 中的方法 getMock()
        在phpunit检测到mock对象,当要替换的对象由类实例化时,就被替换成了mock的对象,然后,使用mock的方法放回对象的值。
    --【百度百科--定义mock
 

  4.2) 一些常识

  • @test 标注将其标记为测试方法
  • @depends 标注来表达测试方法之间的依赖关系: 被依赖的函数的返回值会被当做依赖着的输入参数

5.参考

  5.0)【好】PHPUnit手册

  5.1)开始使用 PHPUnit – PHP测试框架

  5.2)web3d/TPUnit: ThinkPHP PHPUnit框架集成

  5.3)[PHP]PHPUnit安装配置及样例 | CoinIdea的技术分享博客

  5.4)《xUnit Test Patterns》学习笔记系列 - CoderZh - 博客园
  

  5.5)【好】PHPUnit笔记

【夯实PHP基础】PHPUnit -- PHP测试框架的更多相关文章

  1. java基础之junit测试框架

    1.导入junit包, 2.测试方法格式 public void test_*(){} 继承  TestCase  包(keep the bar green to keep the code clea ...

  2. phpunit 测试框架安装

    PHPUnit是一个轻量级的PHP测试框架.它是在PHP5下面对JUnit3系列版本的完整移植,是xUnit测试框架家族的一员(它们都基于模式先锋Kent Beck的设计).来自百度百科 一.下载wg ...

  3. 基于python3在nose测试框架的基础上添加测试数据驱动工具

    [本文出自天外归云的博客园] Python3下一些nose插件经过2to3的转换后失效了 Python的nose测试框架是通过python2编写的,通过pip3install的方式安装的nose和相关 ...

  4. Python测试框架pytest入门基础

    Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...

  5. 测试必会 Docker 实战(一):掌握高频命令,夯实内功基础

    在 Dokcer 横空出世之前,应用打包一直是大部分研发团队的痛点.在工作中,面对多种服务,多个服务器,以及多种环境,如果还继续用传统的方式打包部署,会浪费大量时间精力. 在 Docker 出现后,它 ...

  6. PHP自动测试框架Top 10

    对于很多PHP开发新手来说,测试自己编写的代码是一个非常棘手的问题.如果出现问题,他们将不知道下一步该怎么做.花费很长的时间调试PHP代码是一个非常不明智的选择,最好的方法就是在编写应用程序代码之前就 ...

  7. Java Junit测试框架

    Java    Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...

  8. 夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理

    目录 final使用 final变量 final修饰基本数据类型变量和引用 final类 final关键字的知识点 final关键字的最佳实践 final的用法 关于空白final final内存分配 ...

  9. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

随机推荐

  1. JVM(二)—— 垃圾回收

    垃圾回收 垃圾回收主要解决三个问题(回收哪些Which,什么时候回收WHEN,如何回收HOW) 一.回收哪些 这三个问题,最主要的还是第一个,Which回收哪些,评断回收还是不回收的标准是看对象是否被 ...

  2. C#窗体越界时鼠标还能回到初始坐标位置

    对窗体加越界限制后,鼠标拖动窗体越界时,窗体不能动,鼠标位置可动,但窗体不再越界时,鼠标位置还能回到鼠标按下时相对窗体的坐标:1.首先创建一个窗体Form1,然后在窗体上拖一个button1按钮(主要 ...

  3. JSTL_Format标记库

    JSTL_Format 一:JSTL Format标记库 如有转载,请标明出处 介绍标记属性的时候,按照顺序必须写的->带有默认值的->其他的,中间用回车隔开 在jsp问价开头加上 < ...

  4. spring boot 打jar包,获取resource路径下的文件

    前言:最近在spring boot项目静态类中获取resource路径下文件,在idea中启动都可以获取,但是打包后变成了jar包 就无法获取到. 我想到了两种方法,一种是根据http访问静态资源比如 ...

  5. Android Service解析

    Android Service是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件,它分为两种工作状态,一种是启动状态,主要用于执行后台计算:另一种是绑定状态,主要用于其他组件和Service ...

  6. mybatis缓存机制

    目录 mybatis缓存机制 Executor和缓存 一级缓存 小结 二级缓存 小结 mybatis缓存机制 mybatis支持一.二级缓存来提高查询效率,能够正确的使用缓存的前提是熟悉mybatis ...

  7. 异常:Data = 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。

    做项目的时候,将DataTable序列化成Json,通过ashx向前台返回数据的时候,前台总是获取不到数据,但是程序运行却没问题, 没抛出异常.一时找不到办法,减小输出的数据量,这时前台可以接收到页面 ...

  8. 反向ajax实现原理

    留言板显示留言一直刷新,那么实现原理是怎么样的? 一般发送留言就是通过正常的ajax向服务器发送数据,而实时显示留言就需要用到轮询了. 什么是轮询:就是使用定时器,每隔固定的时间从客户端向服务器发起请 ...

  9. xshell工具source导入几个G的数据库

    直奔主题 xshell工具source导入几个G的数据库 1.先把sql文件通过ftp或者winscp上传到服务器对应站点根目录,如图所示 2.进入xshell界面,进入数据库之前一定设定编码,否者会 ...

  10. 弹性盒模型flex

    一.flex flex是flexible box的缩写,意为“弹性布局”: 定义弹性布局 display:flex; box{ display:flex; } 二.基本定义 我只简单的说一下容器和项目 ...