[解決済み】PHPUnitでprotectedメソッドをテストするためのベストプラクティス
2022-03-26 14:32:01
質問
でのディスカッションを見つけました。 プライベートメソッドのテストは行っていますか? は参考になります。
私は、いくつかのクラスで、protectedメソッドを持ち、それらをテストすることにしました。 これらのメソッドのいくつかは、静的で短いものです。ほとんどのパブリックメソッドはそれらを使用しているので、私はおそらく後でテストを安全に削除することができます。しかし、TDDアプローチを開始し、デバッグを避けるために、私は本当にそれらをテストしたいのです。
を思いつきました。
- メソッドオブジェクト でアドバイスしているように 回答 はやりすぎのような気がします。
- パブリックメソッドから始めて、上位のテストによってコードカバレッジが得られるようになったら、それらをprotectedにしてテストを削除します。
- テスト可能なインターフェイスを持つクラスを継承し、protected メソッドを public にする。
どれがベストプラクティスですか?他に何かありますか?
JUnitは自動的にprotectedメソッドをpublicに変更しているようですが、深く見ていません。PHPでは リフレクション .
どのように解決するのですか?
PHP5 (>= 5.3.2) と PHPUnit を使っている場合、テストを実行する前にリフレクションを使って private や protected のメソッドを public に設定することで、そのメソッドをテストすることができます。
protected static function getMethod($name) {
$class = new ReflectionClass('MyClass');
$method = $class->getMethod($name);
$method->setAccessible(true);
return $method;
}
public function testFoo() {
$foo = self::getMethod('foo');
$obj = new MyClass();
$foo->invokeArgs($obj, array(...));
...
}
関連
-
[解決済み】PHP - 構文エラー、予期しないT_CONSTANT_ECAPSED_STRING [閉店].
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み] phpunitで単一のテストメソッドを実行する方法は?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて
-
[解決済み] プライベートメソッドをテストすべきか、パブリックメソッドのみをテストすべきか?[クローズド]