シングルテストでよくある問題として、サイドクラスのプライベートメソッドを直接呼び出すことができないという問題があります。処理中に、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