LoginSignup
4
4

More than 5 years have passed since last update.

PHPUnitでprotectedなメンバー変数、メソッドをテストする

Last updated at Posted at 2016-02-27

PHPunitでテストを書いているとprotectedなメンバー変数、メソッドをどうやってテストしようか悩むときがあるでその方法を覚書。

まずは手段

  1. まっとうにやるならReflectionを使う
  2. クラスを継承してprotectedにアクセスできるようにする
  3. そもそもprotectedは使わないで実装する

1は正攻法、これができれば一番いいかもしれない。
でもうちの会社ではテストが分かりづらくなるから使わない方針になってしまっている。

3はないな、うん、ない。

ということで2の方法でやるとこにする。

クラスを継承してprotectedにアクセスできるようにする

この方法もGoogle先生に聞くといろいろ出てくる。
そこで一番簡単な方法が以下である。

php
class Hogehoge extends Hoge {
    // メンバー変数にセット
    public function __set($name, $value) {
        return $this->$name = $value;
    }
    // メンバー変数取得
    public function __get($name) {
        return $this->$name;
    }
    // メソッドの呼び出し
    public function __call($name, $args) {
        return call_user_func_array( array($this, $name), $args);
    }
}

Hogeクラスにprotectedなメンバー変数とメソッドがある想定ですが、
それを継承して上記をコピペすればpublicな感覚でアクセスすることができるようになります。

あとはHogehogeクラスでテストを書いていけばよいわけです。

久々にPHPのマジックメソッドいいね!と思えました。

ただ、これはprotectedに関してだけ使える方法なのでprivateは別の方法でアクセスできるようにする必要がある。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4