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!

  • 相关阅读:
    算法-第四版-练习1.3.2解答
    彻底理解线索二叉树(转载)
    C/C++——C++中new与malloc的10点区别(转载)
    C语言中的struct和typedef struct(转载)
    C语言实现贪吃蛇
    C语言实现2048小游戏
    案例开发准备
    WordCount单词计数
    MapReduce原理与实现
    HDFS简介
  • 原文地址:https://www.cnblogs.com/davidhhuan/p/12825530.html
Copyright © 2011-2022 走看看