ホームページ  >  記事  >  バックエンド開発  >  リフレクション呼び出しのプライベート メソッドの実践 (php、java)、_PHP チュートリアル

リフレクション呼び出しのプライベート メソッドの実践 (php、java)、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:02:29821ブラウズ

プライベートメソッドのリフレクティブ呼び出しの練習(php、java)、

シングルテストでよくある問題として、サイドクラスのプライベートメソッドを直接呼び出すことができないという問題があります。処理中に、Xiaoyan はリフレクションを通じてメソッドのアクセス許可を変更し、単一のテストを実行して共有し、コードを直接アップロードします。

簡単なテストクラス

プライベート メソッドを 1 つだけ含む単純なテスト クラスを生成します。

コードをコピーします コードは次のとおりです:

単一のテストコード

コードをコピーします コードは次のとおりです:
objMyClass = new MyClass();}/*** リフレクションを使用して、クラス内のプライベート メソッドと保護メソッドを単体テストします * * @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: プライベート関数の呼び出しをテストする*/public function testPrivateFunc(){$testCase = '単なるテスト文字列';//このクラスを反映$testFunc = self::getPrivateMethod('privateFunc');$res = $testFunc->invokeArgs($this ->objMyClass, array($testCase));$this->assertEquals($testCase, $res);$this->expectOutputRegex('/success/i');// パラメータなし例外をキャプチャする test try { $testFunc->invokeArgs($this->transfer2Pscase, array());} catch (Exception $expected) {$this->assertNotNull($expected);return true;}$this->fail(self ::失敗);}}

実行結果

cuihuan:test cuixiaohuan$ phpunit MyClassTest.php PHPUnit 4.8.6 by Sebastian Bergmann および寄稿者。時間: 103 ミリ秒、メモリ: 11.75MbOK (1 テスト、3 アサーション)

キーコード分析

テスト対象クラスのメソッドのリフレクション呼び出しをカプセル化すると同時に、returnメソッドの前の処理メソッドのアクセス許可がtrueであれば、プライベート関数メソッドにアクセスできます。

コードをコピーします コードは次のとおりです:
/*** リフレクションを使用して、クラス内のプライベート メソッドと保護メソッドを単体テストします * * @param $strMethodName string: リフレクション関数名 * @return ReflectionMethod obj: コールバック オブジェクト*/保護された静的関数 getPrivateMethod($strMethodName) {$objReflectClass = new ReflectionClass(self::CLASS_NAME);$method = $objReflectClass->getMethod($strMethodName);$method->setAccessible( true);$method を返す;}

リフレクションを使用して Java の別のタイプのプライベート メソッドを呼び出す方法を共有しましょう

Java アプリケーションは永続クラスのプライベート メソッドにアクセスできないことはわかっていますが、Hibernate にはこの制限はなく、プライベート、デフォルト、プロテクト、パブリックなどのさまざまなレベルのメソッドにアクセスできます。次のように、JAVA のリフレクション メカニズムを使用します:

リーリー

出力結果は次のとおりです: ---452345234----q31234132

興味がありそうな記事:

  • PHP クラスにおけるプライベート属性の継承の問題の分析
  • PHP クラスとオブジェクトにおけるプライベート アクセス制御に関する質問
  • PHP クラスにおける public、private、protected の違いと例の分析
  • PHP オブジェクト指向 public private protected アクセス修飾子の簡単な分析
  • Java の private 修飾子は無効ですか?

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1084580.html技術記事リフレクション呼び出しのプライベートメソッドの練習(php、java)、単体テストでよくある問題として、サイドクラスのプライベートメソッドを直接呼び出すことができないという問題があります。 Xiaoyan は処理中にリフレクションを通じてメソッドを変更します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。