19-06 【phpunit和docker】

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 82019年2月1日PHP 7.2, PHP 7.3, PHP 7.4在2021年2月5日结束支持
PHPUnit 72018年2月2日PHP 7.1, PHP 7.2, PHP 7.3在2020年2月7日结束支持
PHPUnit 62017年2月3日PHP 7.0, PHP 7.1, PHP 7.2在2019年2月1日结束支持
PHPUnit 52015年10月2日PHP 5.6, PHP 7.0, PHP 7.1在2018年2月2日结束支持
PHPUnit 42014年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.13 by Sebastian Bergmann, Julien Breux (Docker) and contributors.

.                                                                   1 / 1 (100%)

Time: 28 ms, Memory: 4.00MB

OK (1 test, 1 assertion)

 

转载于:https://www.cnblogs.com/helww/p/10672313.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值