PHPの private なメソッドを無理やりテストする方法

Java の package プライベートとかほんと素晴らしい仕組みだと思うのですが、他言語はなかなかないですね…。最近だと Swift2 でようやく @testable import などという形で、モジュールプライベート的なメソッドをテストできるようになっていますが、まだまだ Java に比べると柔軟ではない感じはあります。そもそも、Swift1系はアクセス修飾子の設計普通にミスってるんじゃないかと思いますが、まあ言語を作っている方々は自分よりもはるかに知識がある方々だと思うので、いろいろあったのかな…という感想。自分はコードを読み書きするときにアクセス修飾子を基準にどこから読み進めるかとか、このメソッドは重要だなとかを判断するので、やっぱりこのあたりの機能が柔軟な言語のほうが好き。

本題。PHPの private メソッドを無理やりテストする方法。まあリフレクションしかないですよね。ということで、以下のような具合(自分のための備忘録)。

        $model = テスト対象のインスタンス;
        $method = new ReflectionMethod(get_class($model), 'テスト対象のインスタンスメソッド名');
        $method->setAccessible(true);
        // 想定した入力値を正しく扱える
        $this->assertEquals($method->invoke($model, args), expected);

にゃ〜ん…って感じだ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です