国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

zhaochunqi / 2580人閱讀

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

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

簡單被測(cè)試類

生成一個(gè)簡單的被測(cè)試類,只有個(gè)private方法。


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

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


    /**
     * @brief :測(cè)試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ù)異常測(cè)試
        try {
             $testFunc->invokeArgs($this->transfer2Pscase, array());
        } catch (Exception $expected) {
            $this->assertNotNull($expected);
            return true;
        }

        $this->fail(self::FAIL);
    }
    
}
運(yùn)行結(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)鍵代碼分析

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21285.html

相關(guān)文章

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

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

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

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

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

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

    Astrian 評(píng)論0 收藏0
  • PHP反射機(jī)制

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

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

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

    dreamGong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<