成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php反射調(diào)用private方法實踐

zhaochunqi / 2587人閱讀

摘要:問題背景單測中有個普遍性的問題,被側(cè)類中的方法無法直接調(diào)用。小拽在處理過程中通過反射改變方法權(quán)限,進行單測,分享一下,直接上代碼。簡單被測試類生成一個簡單的被測試類,只有個方法。私有方法單測代碼崔小渙單測的基本模板。

問題背景:單測中有個普遍性的問題,被側(cè)類中的private方法無法直接調(diào)用。小拽在處理過程中通過反射改變方法權(quán)限,進行單測,分享一下,直接上代碼。

簡單被測試類

生成一個簡單的被測試類,只有個private方法。


單測代碼
objMyClass = new MyClass();
    }

    /**
     * 利用反射,對類中的private 和 protect 方法進行單元測試
     *
     * @param $strMethodName  string  :反射函數(shù)名
     * @return ReflectionMethod obj   :回調(diào)對象
     */
    protected static function getPrivateMethod($strMethodName) {
        $objReflectClass = new ReflectionClass(self::CLASS_NAME);
        $method          = $objReflectClass->getMethod($strMethodName);
        $method->setAccessible(true);
        return $method;
    }


    /**
     * @brief :測試private函數(shù)的調(diào)用
     */
    public function testPrivateFunc()
    {
        $testCase = "just a test string";

        // 反射該類
        $testFunc = self::getPrivateMethod("privateFunc");
        $res = $testFunc->invokeArgs($this->objMyClass, array($testCase));

        $this->assertEquals($testCase, $res);
        $this->expectOutputRegex("/success/i");
        
        // 捕獲沒有參數(shù)異常測試
        try {
             $testFunc->invokeArgs($this->transfer2Pscase, array());
        } catch (Exception $expected) {
            $this->assertNotNull($expected);
            return true;
        }

        $this->fail(self::FAIL);
    }
    
}
運行結(jié)果
cuihuan:test cuixiaohuan$ phpunit MyClassTest.php 
PHPUnit 4.8.6 by Sebastian Bergmann and contributors.


Time: 103 ms, Memory: 11.75Mb

OK (1 test, 3 assertions)
關(guān)鍵代碼分析

封裝了一個,被測類方法的反射調(diào)用;同時,返回方法之前處理方法的接入權(quán)限為true,便可以訪問private的函數(shù)方法。

/**
 * 利用反射,對類中的private 和 protect 方法進行單元測試
 *
 * @param $strMethodName  string  :反射函數(shù)名
 * @return ReflectionMethod obj   :回調(diào)對象
 */
protected static function getPrivateMethod($strMethodName) {
    $objReflectClass = new ReflectionClass(self::CLASS_NAME);
    $method          = $objReflectClass->getMethod($strMethodName);
    $method->setAccessible(true);
    return $method;
}

【轉(zhuǎn)載請注明:phpunit單測中調(diào)用private方法處理 | 靠譜崔小拽 】

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21285.html

相關(guān)文章

  • PHP程序員如何理解依賴注入容器(dependency injection container)

    摘要:代碼這就是控制反轉(zhuǎn)模式。是變量有默認值則設(shè)置默認值是一個類,遞歸解析有默認值則返回默認值從容器中取得以上代碼的原理參考官方文檔反射,具有完整的反射,添加了對類接口函數(shù)方法和擴展進行反向工程的能力。 PHP程序員如何理解依賴注入容器(dependency injection container) 背景知識 傳統(tǒng)的思路是應(yīng)用程序用到一個Foo類,就會創(chuàng)建Foo類并調(diào)用Foo類的方法,假如這...

    Coding01 評論0 收藏0
  • 反射PHP 中的應(yīng)用

    摘要:反射在每個面向?qū)ο蟮木幊陶Z言中都存在,它的主要目的就是在運行時分析類或者對象的狀態(tài),導出或提取出關(guān)于類方法屬性參數(shù)等的詳細信息,包括注釋。反射是操縱面向?qū)ο蠓缎椭性P偷模捎糜跇?gòu)建復雜,可擴展的應(yīng)用。 反射在每個面向?qū)ο蟮木幊陶Z言中都存在,它的主要目的就是在運行時分析類或者對象的狀態(tài),導出或提取出關(guān)于類、方法、屬性、參數(shù)等的詳細信息,包括注釋。 反射是操縱面向?qū)ο蠓缎椭性P偷?AP...

    stormgens 評論0 收藏0
  • Swoft 源碼剖析 - Swoft 中 IOC 容器的實現(xiàn)原理

    摘要:作者鏈接來源簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。前言為應(yīng)用提供一個完整的容器作為依賴管理方案,是功能,模塊等功能的實現(xiàn)基礎(chǔ)。的依賴注入管理方案基于服務(wù)定位器。源碼剖析系列目錄 作者:bromine鏈接:https://www.jianshu.com/p/a23...來源:簡書著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對原文進行了重新的排版。Swof...

    Astrian 評論0 收藏0
  • PHP反射機制

    摘要:反射機制反射機制從開始支持,做業(yè)務(wù)開發(fā)的話應(yīng)該很少接觸反射。我的理解就是反射機制能拿到類里面的屬性方法,和的也可以以上是官方文檔中給出的東西,說實話我看了感覺沒什么感覺。在容器成員變量中數(shù)組維護這個類,反射實例調(diào)用構(gòu)造函數(shù),獲取返回值。 PHP反射機制 PHP反射機制從PHP5開始支持,做業(yè)務(wù)開發(fā)的話應(yīng)該很少接觸反射。我其實也是接觸不多,最近在學習laravel的優(yōu)雅,就接觸了到它其中...

    URLOS 評論0 收藏0
  • PHP核心技術(shù)與最佳實踐(第一章 面向?qū)ο笏枷氲暮诵母拍睿?/b>

    摘要:現(xiàn)代的面向?qū)ο蟮乃枷氩粡娬{(diào)為真實世界建模變得更加理性化一些,把目標放在解耦上。各種語言中的多態(tài)多態(tài)確切的含義是同一類的對象收到相同消息時,會得到不同的結(jié)果。小結(jié)本章主要介紹面向?qū)ο笏枷氲某绦虻慕M成元素類和對象。 第一章 面向?qū)ο笏枷氲暮诵母拍?showImg(https://segmentfault.com/img/bVNfjM?w=673&h=334); showImg(https:...

    dreamGong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<