phpunit简介

在用PHP做项目的时候,有时候我们需要写一些测试代码,其中可能包含单元测试(比如字符串处理,ip解析,mobile解析等)。

我们常用的工具是phpunit,它很方便地帮我们组织测试代码,很方便。laravel和phpunit集成的很好。

下面我们来简单写个demo来了解下phpunit。

代码示例:

<?php
use PHPUnit\Framework\TestCase; class StackTest extends TestCase
{
public function testEmpty()
{
$stack = [];
$this->assertEmpty($stack); return $stack;
} /**
* @depends testEmpty
*/
public function testPush(array $stack)
{
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertNotEmpty($stack); return $stack;
} /**
* @depends testPush
*/
public function testPop(array $stack)
{
$this->assertEquals('foo', array_pop($stack));
$this->assertEmpty($stack);
}
}
?>

执行测试用例:phpunit a.php

输出:

rudi@localhost:~/Downloads/php/phpunit$ phpunit a.php
PHPUnit 7.5.6 by Sebastian Bergmann and contributors. ... 3 / 3 (100%) Time: 76 ms, Memory: 8.00MB OK (3 tests, 5 assertions)

我们遇到的问题

有的时候,我们会遇到一些尴尬:

比如我们之前的测试代码用的php5.6来完成的,但是我们换电脑了,新电脑上只有php7的环境,那么很糟糕,php5.6的测试代码和php7的写作方式不一样,我们没办法直接使用phpunit来配合当前的php7环境执行之前的测试代码。

我们想办法来解决这个困扰。

一个可能的解决方案:docker

毕竟我们并不需要一个完整的php环境,我们仅仅需要的是用正确的phpunit版本,来替换适配的php版本(这样我们就不再需要编译php的各个版本了,最关键的是不用被各种依赖项所困扰了),来跑我们的测试用例。

phpunit的docker镜像:https://hub.docker.com/r/phpunit/phpunit/tags?page=1

我们从里面选择适配的php版本。

这里有一份对应关系,表示phpunit和php版本的对应关系。查看链接:http://www.phpunit.cn/

支持版本

主版本 初始版本 PHP兼容性 支持
PHPUnit 8 2019年2月1日 PHP 7.2, PHP 7.3, PHP 7.4 在2021年2月5日结束支持
PHPUnit 7 2018年2月2日 PHP 7.1, PHP 7.2, PHP 7.3 在2020年2月7日结束支持
PHPUnit 6 2017年2月3日 PHP 7.0, PHP 7.1, PHP 7.2 在2019年2月1日结束支持
PHPUnit 5 2015年10月2日 PHP 5.6, PHP 7.0, PHP 7.1 在2018年2月2日结束支持
PHPUnit 4 2014年3月7日 PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6 在2017年2月3日结束支持

借助多版本的docker工具(phpunit)来测试代码

1,下拉docker的phpunit镜像:docker pull phpunit/phpunit,默认下载是latest版本的(latest版本和最大版本号保持一致,我查看时候最大版本是7.4.0);

命令是:

docker pull phpunit/phpunit

2,执行测试用例

命令是:

docker run -v $(pwd):/app --rm  phpunit/phpunit a.php --filter=testEmpty

解释下这个常命令:

$(pwd)表示是bash所处在的当前目录;

$(pwd):/app:表示当前目录映射到容器中的/app目录,这个目录是phpunit默认的执行路径

--rm 如果容器存在则自动移除

--rm phpunit/phpunit:表示如果容器phpunit/phpunit存在则移除,并运行

(a.php --filter=testEmpty):表示phpunit的运行参数,后面可以添加任意的phpunit支持的参数

来查看下示范代码:

<?php
use PHPUnit\Framework\TestCase; class StackTest extends TestCase
{
public function testEmpty()
{
$stack = [];
$this->assertEmpty($stack); return $stack;
} /**
* @depends testEmpty
*/
public function testPush(array $stack)
{
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertNotEmpty($stack); return $stack;
} /**
* @depends testPush
*/
public function testPop(array $stack)
{
$this->assertEquals('foo', array_pop($stack));
$this->assertEmpty($stack);
}
}
?>

查看执行的结果:

PHPUnit 6.5. by Sebastian Bergmann, Julien Breux (Docker) and contributors.

.                                                                    /  (%)

Time:  ms, Memory: .00MB

OK ( test,  assertion)

19-06 【phpunit和docker】的更多相关文章

  1. [5.19 线下活动]Docker Meetup杭州站—拥抱Kubernetes,容器深度实践

    对本次线下活动感兴趣的朋友,欢迎点击此处报名,领取免费票. 今年3月,Docker刚刚过完5岁生日,五年期间,Docker也逐渐在技术和实践方面趋于成熟,更是在去年年底主动拥抱Kubernetes. ...

  2. Docker系列06:Linux修改docker镜像和容器数据存储位置

    指定镜像和容器存放路径的参数是--graph=/var/lib/docker,其默认存储位置为/var/lib/docker, Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的 ...

  3. Catch That Cow 分类: POJ 2015-06-29 19:06 10人阅读 评论(0) 收藏

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 58072   Accepted: 18061 ...

  4. 浅谈IOS8之size class 分类: ios技术 2015-02-05 19:06 62人阅读 评论(0) 收藏

    文章目录 1. 简介 2. 实验 3. 实战 3.1. 修改 Constraints 3.2. 安装和卸载 Constraints 3.3. 安装和卸载 View 3.4. 其他 4. 后话 以前和安 ...

  5. [19/06/09-星期日] CSS基础_示例

    一.图片格式&Hack(尽量不要使用) IE6对图片png-24的透明效果不支持,IE6中背景会发灰,可以使用png-8来代替.但是使用png-8代替之后清晰度会有所下降. 使用js来解决该问 ...

  6. [19/06/08-星期六] CSS基础_表格&表单

    一.表格 如生活中的Excel表格,用途就是同来表示一些格式化的数据,如课程表.工资条.成绩单. 在网页中也可以创建出不同的表格,在HTML中使用table标签来创建一个表格.table是个块元素. ...

  7. [19/06/07-星期五] CSS基础_布局&定位&背景样式

    一.固定布局(不适应设备的浏览器的变化) <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  8. [19/06/06-星期四] CSS基础_盒子模型

    一.盒子模型(框模型.盒模型) CSS处理网页时,它认为每个元素都在一个不可见的矩形盒子里. 为什么想象成盒子模型?因为把所有元素想象成盒子,那么我们对网页的布局就相当于摆放盒子.我们只需要把相应的盒 ...

  9. [19/06/06-星期四] HTML基础_文本标签、列表(有序、无序、定义)、文本格式化(单位、字体、大小写、文本修饰、间距、对齐文本)

    一.文本标签 em:用来表示一段内容的着重点,语气上的强调.一般显示为斜体 i:是斜体显示,和em显示效果一样.h5规定不需要着重的内容而是单纯加粗或斜体可以用i或b.用的不多 strong:用来表示 ...

随机推荐

  1. C++调用JS函数

    1 调用方法 https://blog.csdn.net/donglinshengan/article/details/29828103 https://blog.csdn.net/sunmz_wjx ...

  2. 研究并尝试改进Vyeshal

    我想研究Vyeshal,这样就不可避免的要用到游戏中的语音.然而游戏内的语音文件是.bank类型的,如何转化为可听文件是个问题.

  3. ARM开发板挂载虚拟机 nfs目录

    ARM开发板做相关开发,为了调试方便,常把开发板mnt目录挂载到虚拟机nfs共享目录上,这样调试程序时候就不用把程序转到开发板上再运行,方便很多.要挂载nfs共享目录,需要安装必要的组件支持. 1.虚 ...

  4. java类的生命周期

    https://www.cnblogs.com/aspirant/p/7200523.html 验证的内容:文件格式,字节码,符号引用,元数据 准备:给静态变量分配内存设置初始值(0) 初始化才是真正 ...

  5. vue 组件自定义v-model

    参考资料:vue官网在vue 中使用v-model双向绑定 <input v-model="something"> 其实是语法糖 <input :value=&q ...

  6. 【HDFS API编程】查看目标文件夹下的所有文件、递归查看目标文件夹下的所有文件

    使用hadoop命令:hadoop fs -ls /hdfsapi/test  我们能够查看HDFS文件系统/hdfsapi/test目录下的所有文件信息 那么使用代码怎么写呢?直接先上代码:(这之后 ...

  7. LeetCode 203. Remove Linked List Elements 移除链表元素 C++/Java

    Remove all elements from a linked list of integers that have value val. Example: Input: ->->-& ...

  8. DNS的功能-域名空间、域名注册和域名解析

    DNS的主要功能包括以下三个: 域名空间:定义一个包括所有可能出现的主机名字的域名空间. 域名注册:保证每台主机域名的唯一性. 域名解析:提供一种有效的域名与IP地址转换机制. DNS域名空间 (1) ...

  9. Webpack 使用url-loader和file-loader打包资源文件

    在js中不仅可以通过import引入js文件,还可以引入图片.视频等资源文件,这样webpack打包时就会把所引入的资源文件也一起打包进来 打包进来的文件会返回一个字符串:即文件的路径 要做到这一点, ...

  10. for 和while循环 if else

    for和 while循环 当你知道循环次数的话就用for循环, 不知道的时候用while循环,while必须要有结束条件 a +=1  等于 a =a+1 for i in  xxx: i:是一个变量 ...