• 19-06 【phpunit和docker】


    phpunit简介

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

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

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

    代码示例:

    <?php
    use PHPUnitFrameworkTestCase;
    
    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 PHPUnitFrameworkTestCase;
    
    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)
  • 相关阅读:
    jquery城市选择案例
    jquery点击回到页面顶部方法
    jquery动态创建表格
    myeclipse、eclipse中项目复制后(可能无法访问)注意事项 .
    Myeclipse如何整合tomcat
    Java学习路线图
    ftp
    用javascript实现简体和繁体字间的转换
    FTP远程命令集
    JDBC-ODBC桥乱码问题解决方案
  • 原文地址:https://www.cnblogs.com/helww/p/10672313.html
Copyright © 2020-2023  润新知