zoukankan      html  css  js  c++  java
  • [PHP] Laravel单元测试-如何对final类进行mock

    前言:单元测试是一项重要的开发技能

    关于如何在laravel做单元测试就不多介绍了,写这文章的时候,使用的是Laravel6.x,关于它的单元测试可参考:https://learnku.com/docs/laravel/6.x/testing/5182

    PHPUnit与Mockery是不支持final类的mock测试的,在网上翻了很久,终于找到一篇靠谱的,而且是成功的案例,原地址:https://www.tomasvotruba.com/blog/2019/03/28/how-to-mock-final-classes-in-phpunit/

    步骤1,安装扩展

    composer require dg/bypass-finals --dev

    步骤2,创建hook类

    tests/Hook/BypassFinalHook.php

    <?php
    
    namespace TestsHook;
    
    use DGBypassFinals;
    use PHPUnitRunnerBeforeTestHook;
    
    /**
     * Class BypassFinalHook
     * @package TestsHook
     *
     * @author birdylee <birdylee_cn@163.com>
     * @since 2020-05-04
     */
    class BypassFinalHook implements BeforeTestHook
    {
    
        /**
         * @inheritDoc
         */
        public function executeBeforeTest(string $test): void
        {
            BypassFinals::enable();
        }
    }

    步骤3,配置phpunit.xml

    这个文件,在laravel根目录已经存在了,在对应的位置加上

    <extensions>
        <extension class="TestsBootstrap"/>
        <extension class="TestsHookBypassFinalHook"/> <!-- 加上这句 -->
    </extensions>

    步骤4,示例代码

    final类

    final class TestCacheConst extends PeaConstsCacheConst
    {
        /**
         *
         * @author birdylee <birdylee_cn@163.com>
         * @since 2020-05-03
         */
        public function unittest()
        {
            return 'original';
        }
    }

    test类

    class FinalClassTest extends TestCase
    {
    
        /**
         *
         * @author birdylee <birdylee_cn@163.com>
         * @since 2020-05-03
         */
        public function testCommonMethod()
        {
            $this->mock('overload:' . TestCacheConst::class, function (MockInterface $mock) {
                $mock->shouldReceive('unittest')->andReturn('mock unittest');
            });
    
            $cacheConst = new TestCacheConst();
    
            echo $cacheConst->unittest();
        }
    }

    就是那么简单!

    Hava fun with PHP!

  • 相关阅读:
    python接口测试3-JSON格式
    python接口测试2-开发WEB接口
    接口测试1-基础
    Apifox接口测试管理工具
    python的pip安装超时问题解决
    ubuntu解决安装速度问题
    vim进入粘贴模式
    禅道数据库
    内存管理
    文件操作
  • 原文地址:https://www.cnblogs.com/davidhhuan/p/12825530.html
Copyright © 2011-2022 走看看