phpstrom、laradock、phpunit 进行单元测试

phpstrom、laradock、phpunit 进行单元测试

背景:
  1. 环境: windows 系统电脑,laradock 套集成环境,phpstrom开发
  2. 容器中的项目与的本地项目为同一路径,这是基于映射机制实现的,日常开发使用 phpstrom(IDE) 直接打开本地的项目进行开发
  3. 如今我想实现单元测试,本地修改代码,在IDE中点击运行,就能使用容器中的环境来运行。这想法是可以实现的!!
实现原理:
  1. IDE 中进行单元测试,IDE 会使用 SSH 命令连接到容器(实现方式很多,这里介绍 SSH 模式)
  2. 根据映射关系找到服务器项目的对应目录、类、方法
  3. 使用 phpunit 来进行单元测试
实现步骤:
步骤一:容器上运行单元测试
  1. 进入项目所在容器(workspace 容器)的项目目录下运行命令php artisan make:test UserTest --unit来生成一个单元测试类,其路径为 tests/Unit/UserTest.php
root@62d044ee2a7e:/var/www/test.love.com# php artisan make:test UserTest --unit
Test created successfully.

提示:将 use PHPUnit\Framework\TestCase; 替换成 use Tests\TestCase

  1. tests/Unit/UserTest.php类添加一个 testExample方法,已存则替换。使用 echo输出内容,可以方便看到结果,如下:
    public function testExample()
    {
        echo '单元测试跑起来了';
    }
  1. 运行命令./vendor/bin/phpunit tests/Unit/UserTest.php并查看结果,如果看到单元测试跑起来了就表明容器的单元测试 OK 了
root@62d044ee2a7e:/var/www/test.love.com# ./vendor/bin/phpunit tests/Unit/UserTest.php
PHPUnit 7.5.20 by Sebastian Bergmann and contributors.

R      1 / 1 (100%)单元测试跑起来了

Time: 878 ms, Memory: 32.00 MB
步骤二: 设置允许使用 ssh 方式连接容器
  1. 打开 laradock 目录的 .env文件,将WORKSPACE_INSTALL_WORKSPACE_SSH 环境变量设为 true
  2. laradock目录下执行命令docker-compose build workspace来重新构建workspace容器
  3. laradock目录下执行命令docker-compose up -d workspace来停止旧并重新创建workspace容器(保留装入的卷)
步骤三: phpstrom(IDE) 连接容器
  1. 按以下步骤File -> Settings... -> Languages & Frameworks -> PHP打开 PHP 配置,按照图指示步骤去设置连接容器的 ssh 配置
    在这里插入图片描述

图片步骤解释:
1 打开 PHP 配置
2 打开复杂选项
3 打开添加 CLI 解释器弹窗
4 选择 SSH 类型的远程PHP解释器(新建一个 SSH 类型的远程PHP解释器)
5 打开复杂选项
6 新建一个指定类型的 SSH。选择 From Docker,Vagrant,VM, Remote...选项
7 容器的IP
8 容器 SSH 端口。上面IP填写主机的,那则填写映射端口号 22->2222
9 连接用户名
10 选择key pair类型的 ssh 授权方式。选它是因为 laradock提供了 workspace容器的秘钥
11 选择 workspace容器秘钥所在路径
12 测试连接
13 确定连接成功信息
14 15 应用与确定配置

  1. 打开 PHP 配置,按照图指示设置本地 web 目录与容器 web 目录的映射关系
    在这里插入图片描述

图片步骤解释:
3 本地工作环境目录
4 容器工作环境目录

步骤四: 运行单元测试
  1. 点击方法或者类左侧的三角,即可看到单元测试的结果。yes,大功告成!
    在这里插入图片描述
疑问解答:
  1. Q:为什么不在本地安装一个PHP来跑单元测试呢?
    A: 开发环境都安装在容器中,本地安装的PHP无法正确读取配置。或许可以,暂时还不知道如何配置。
  2. Q: 我为什么要使用单元测试?
    A: 提示自己的代码解耦,快速模拟各种情况测试,测试按钮更加近,操作起来更加块了,且可以减少切换应用带来的时间
  3. Q:为什么跳过安装 phpunit 的步骤
    A: laravel 框架自带 phpunit 扩展,其配置phpunit.xml就在项目根目录下
程序代码:

./phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>

        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <server name="APP_ENV" value="testing"/>
        <server name="BCRYPT_ROUNDS" value="4"/>
        <server name="MAIL_DRIVER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
    </php>
</phpunit>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值