2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2014.08.08
プログラミングPHPUnitでprivateなメソッドをテストする(PHP5.4〜)
こんにちは、KTです。
PHPUnitを使って、privateなメソッドをテストする方法について紹介します。
例えば、以下のようなクラスがあったとして、
<?php class Hoge { private function fuga() { return 'This is private method!'; } private static function piyo() { return 'This is private static method!'; } }
以下のようにテストを書くことで、このクラスのfugaメソッド, piyoメソッドをテストできます。
<?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などへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索