単体テストはpublicで公開されているものだけで十分という意見が主流のようだ。 しかしprtectedメソッドにもサブクラスに「使ってもらう」意図がある場合など、むしろしっかりテストで固めておきたい場合もある。 prtectedで定義されたメソッドは外部から呼べないので、テストは難しい。 よくやる方法は、単体テスト用にターゲットクラスのサブクラスを作ることだ。 PHPではメソッドのオーバーライドするときに、アクセスレベルをprotectedからpublic に緩めることができるので、 そのなかで親クラスのprtectedメソッドをしれっと呼び直せばよい。 <?php class Target { protected function getRealName() { return __METHOD__; } } ?> <?php class TargetExp extends Target
![PHPUnitでprotectedメソッドのテストをしたい - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/2d1633b39bdf426af8ee39924ec9950f730ac695/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9UEhQVW5pdCVFMyU4MSVBN3Byb3RlY3RlZCVFMyU4MyVBMSVFMyU4MiVCRCVFMyU4MyU4MyVFMyU4MyU4OSVFMyU4MSVBRSVFMyU4MyU4NiVFMyU4MiVCOSVFMyU4MyU4OCVFMyU4MiU5MiVFMyU4MSU5NyVFMyU4MSU5RiVFMyU4MSU4NCZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9Zjk3MDZjMTQwNDRiNzE1YWRmMjdlMTNhMDk5MDQyZDI%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrdW1hem8mdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTM2ZjgyZGMwMDJiNmYzNzRkYjkxNDc0Yjg3Yjk5OGU2%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D037df2785697ae4d4a8e18dddfabf4e8)