2025.08.29
Laravelで空判定にif文を使うとハマる理由
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などへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
1
2025.08.29
Laravelで空判定にif文を使うとハマる理由
2

2025.08.29
Git SSH接続でfetch/pullができなくなった時の対処法
3

2025.08.28
【体験談】Amazon Linux 2でMySQLインストール時のOpenSSL・GPG key エラーにハマった話
4
2025.08.28
【AWS】SSMポートフォワーディングとInstance Connectを利用したプライベートEC2へのSSH接続手順
5
2025.07.24
Log::info()が使えない!?Laravel.logのPermission denied エラーを解決する(Docker環境)
タグ検索