摘要:問題背景單測(cè)中有個(gè)普遍性的問題,被側(cè)類中的方法無法直接調(diào)用。小拽在處理過程中通過反射改變方法權(quán)限,進(jìn)行單測(cè),分享一下,直接上代碼。簡單被測(cè)試類生成一個(gè)簡單的被測(cè)試類,只有個(gè)方法。私有方法單測(cè)代碼崔小渙單測(cè)的基本模板。
簡單被測(cè)試類問題背景:單測(cè)中有個(gè)普遍性的問題,被側(cè)類中的private方法無法直接調(diào)用。小拽在處理過程中通過反射改變方法權(quán)限,進(jìn)行單測(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
摘要:代碼這就是控制反轉(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類的方法,假如這...
摘要:反射在每個(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...
摘要:作者鏈接來源簡書著作權(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...
摘要:反射機(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)雅,就接觸了到它其中...
摘要:現(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:...
閱讀 2639·2021-11-22 15:24
閱讀 1370·2021-11-17 09:38
閱讀 2746·2021-10-09 09:57
閱讀 1192·2019-08-30 15:44
閱讀 2438·2019-08-30 14:00
閱讀 3538·2019-08-30 11:26
閱讀 2935·2019-08-29 16:28
閱讀 746·2019-08-29 13:56