2024.03.07
イベントの感想募集でGoogleフォーム使ってみたら便利だった
2014.08.08
プログラミングPHPUnitでprivateなメソッドをテストする(PHP5.4〜)

こんにちは、KTです。
PHPUnitを使って、privateなメソッドをテストする方法について紹介します。
例えば、以下のようなクラスがあったとして、
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php class Hoge { private function fuga() { return 'This is private method!'; } private static function piyo() { return 'This is private static method!'; } } |
以下のようにテストを書くことで、このクラスのfugaメソッド, piyoメソッドをテストできます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php /** * Test for Hoge class * @group App */ class Test_Hoge extends TestCase { // private なメソッドをテストできるよ! public function test_fuga() { Closure::bind(function() { $hoge = new Hoge(); $this->assertEquals( 'This is private method!', $hoge->fuga() ); }, $this, 'Hoge')->__invoke(); } // private static なメソッドもテストできるよ! public function test_piyo() { Closure::bind(function() { $this->assertEquals( 'This is private static method!', Hoge::piyo() ); }, $this, 'Hoge')->__invoke(); } } |
Closure::bind()の第二引数に$thisを渡すことで、クロージャのバインド先を$thisにして、第三引数でHogeクラスのスコープに関連づけることで、クロージャ内でHogeクラスのprivateメソッドにアクセス出来るようにしているということですね。
誰かテスト対象のメソッドを変更せずにstaticなメソッドのモック、スタブを作る方法を教えてください・・・
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索
SNS共有