麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > PHP > 正文

反射調用private方法實踐(php、java)

2024-05-04 23:41:14
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了反射調用private方法實踐(php、java)的相關資料,需要的朋友可以參考下
 

單測中有個普遍性的問題,被側類中的private方法無法直接調用。小拽在處理過程中通過反射改變方法權限,進行單測,分享一下,直接上代碼。

簡單被測試類

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

 

復制代碼代碼如下:

<?php/** * 崔小渙單測的基本模板。 * * @author cuihuan * @date 2015/11/12 22:15:31 * @version $Revision:1.0$ **/class MyClass {/** * 私有方法 * * @param $params * @return bool */private function privateFunc($params){if(!isset($params)){return false;}echo "test success";return $params;}}

 

單測代碼

 

復制代碼代碼如下:

<?php/*************************************************************************** * * $Id: MyClassTest T,v 1.0 PsCaseTest cuihuan Exp$ * **************************************************************************//** * 崔小渙單測的基本模板。 * * @author cuihuan * @date 2015/11/12 22:09:31 * @version $Revision:1.0$ **/require_once ('./MyClass.php');class MyClassTest extends PHPUnit_Framework_TestCase {const CLASS_NAME = 'MyClass';const FAIL  = 'fail';protected $objMyClass;/** * @brief setup: Sets up the fixture, for example, opens a network connection. * * 可以看做phpunit的構造函數 */public function setup() {date_default_timezone_set('PRC');$this->objMyClass = new MyClass();}/** * 利用反射,對類中的private 和 protect 方法進行單元測試 * * @param $strMethodName string :反射函數名 * @return ReflectionMethod obj  :回調對象 */protected static function getPrivateMethod($strMethodName) {$objReflectClass = new ReflectionClass(self::CLASS_NAME);$method = $objReflectClass->getMethod($strMethodName);$method->setAccessible(true);return $method;}/** * @brief :測試private函數的調用 */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');// 捕獲沒有參數異常測試try { $testFunc->invokeArgs($this->transfer2Pscase, array());} catch (Exception $expected) {$this->assertNotNull($expected);return true;}$this->fail(self::FAIL);}}

 

運行結果

cuihuan:test cuixiaohuan$ phpunit MyClassTest.php PHPUnit 4.8.6 by Sebastian Bergmann and contributors.Time: 103 ms, Memory: 11.75MbOK (1 test, 3 assertions)

關鍵代碼分析

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

 

復制代碼代碼如下:

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

 

下面給大家分享java中利用反射調用另一類的private方法

我們知道,Java應用程序不能訪問持久化類的private方法,但Hibernate沒有這個限制,它能夠訪問各種級別的方法,如private, default, protected, public. Hibernate是如何實現該功能的呢?答案是利用JAVA的反射機制,如下: 

<span style="font-size:14px;">import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectDemo {  public static void main(String[] args) throws Exception {   Method method = PackageClazz.class.getDeclaredMethod("privilegedMethod", new Class[]{String.class,String.class});    method.setAccessible(true);   method.invoke(new PackageClazz(), "452345234","q31234132");  } } class PackageClazz {  private void privilegedMethod(String invokerName,String adb) {   System.out.println("---"+invokerName+"----"+adb);  } }</span> 

輸出結果為:---452345234----q31234132



注:相關教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩视频一区二区三区在线观看 | 激情小说激情图片激情电影 | 成人在线97 | 国产成人77亚洲精品www | 毛片午夜| 欧美性受xxxx人人本视频 | 欧美日韩精品不卡一区二区三区 | 亚洲视频黄 | 国产99久久久国产精品下药 | 日韩a毛片免费观看 | 亚洲国产精品久久久久久久久久 | 禁漫天堂久久久久久久久久 | 国产一级毛片网站 | 亚洲一级片免费观看 | 性 毛片 | 亚洲网站免费观看 | 国产乱淫av一区二区三区 | 国产成人av免费观看 | 欧美一级网 | 久久久久久久久久91 | sm高h视频 | 亚洲欧美aⅴ | 久久亚洲精品久久国产一区二区 | www国产免费 | 国产精品免费大片 | 国产91久久久久久 | 一区二区三区无码高清视频 | 亚洲综合视频网 | 久久精品a一级国产免视看成人 | 超碰97人人艹 | 91av原创| h视频免费观看 | 欧美激情性色生活片在线观看 | 免费看欧美一级特黄a大片 久久免费视频一区二区三区 | 国产精品美女一区二区 | 国产羞羞视频在线免费观看 | 草逼一区 | 欧美一级在线免费 | 精品国产91一区二区三区 | 日本娇小videos高潮 | 国产人成免费爽爽爽视频 |