ホームページ  >  記事  >  バックエンド開発  >  PHPUnit でプライベート メソッドを (本当に) モックできますか?

PHPUnit でプライベート メソッドを (本当に) モックできますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 10:17:30668ブラウズ

Can I (Really) Mock Private Methods in PHPUnit?

PHPUnit でプライベート メソッドをモックする方法

問題:

特定のシナリオでは、テストクラスの特定のセクションは、内部で呼び出されるプライベート メソッドが存在するため、困難になる場合があります。プライベート メソッドの結果をスタブして目的のコードをテストするにはどうすればよいですか?

答え:

パブリック API の重要性:

通常、クラスをテストするときは、クラスが提供するコントラクトを表すパブリック API に焦点を当てることをお勧めします。プライベート メソッドとプロテクト メソッドは実装の詳細であり、テストの安定性に影響を与えるべきではありません。

グローバル状態変更のテスト:

場合によっては、プライベート メソッドにロジックが含まれる場合があります。それはグローバルな状態に依存するため、テストが困難になります。これに対処するには、コードをリファクタリングしてグローバル状態を削除し、クラスに注入できる依存関係を導入することを検討してください。

プライベート メソッドをモックするためのモッキング フレームワークの使用:

Ifプライベート メソッドを直接テストすることは避けられないため、PHPUnit はモック フレームワークを使用してプライベート メソッドをモックする方法を提供します。ただし、このアプローチはカプセル化を破壊し、実装の詳細に過度に依存する可能性があるため、一般的に推奨されません。

PHPUnit を使用してプライベート メソッドをモックするには、次の手順に従います。

  1. $testMe = $this->getMock("a", array("c"));
  2. を使用してクラスのモックを作成します。expects() と Method() を使用して期待される動作を設定します。
  3. モックされたクラスに対してテストを実行します。

「プラグマティック単体テスト」からの引用:

「一般に、テストのためにカプセル化を解除したくありません...ほとんどの場合、クラスのパブリック メソッドを実行することでクラスをテストできるはずです。"

以上がPHPUnit でプライベート メソッドを (本当に) モックできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。