PHPUnit で保護されたメソッドをテストするためのベストプラクティス 質問する

PHPUnit で保護されたメソッドをテストするためのベストプラクティス 質問する

私は議論を見つけましたプライベートメソッドをテストしますか有益です。

いくつかのクラスでは、保護されたメソッドを用意してテストすることに決めました。これらのメソッドの一部は静的で短いものです。ほとんどのパブリック メソッドがそれらを使用するので、後でテストを安全に削除できる可能性があります。しかし、TDD アプローチから始めてデバッグを回避するために、私はそれらをテストしたいと思っています。

私は次のことを考えました:

  • メソッドオブジェクトアドバイス通り答えこれはやり過ぎのようです。
  • パブリック メソッドから開始し、より高いレベルのテストによってコード カバレッジが提供される場合は、それらを保護に切り替えてテストを削除します。
  • テスト可能なインターフェースを持つクラスを継承し、保護されたメソッドを公開する

ベストプラクティスはどれですか? 他に何かありますか?

JUnitは自動的に保護されたメソッドをパブリックに変更するようです。しかし、私はそれを詳しく調べていません。PHPはこれを許可しません。反射

ベストアンサー1

PHPUnit で PHP5 (>= 5.3.2) を使用している場合は、テストを実行する前にリフレクションを使用して private メソッドと protected メソッドを public に設定することで、それらをテストできます。

protected static function getMethod($name) {
  $class = new ReflectionClass('MyClass');
  $method = $class->getMethod($name);
  // $method->setAccessible(true); // Use this if you are running PHP older than 8.1.0
  return $method;
}

public function testFoo() {
  $foo = self::getMethod('foo');
  $obj = new MyClass();
  $foo->invokeArgs($obj, array(...));
  ...
}

おすすめ記事