私は単体テストを行っており、クラスの1つでメソッドの1つからメールを送信する必要があるため、コンストラクター注入を使用Zend_Mail
して、Zendフレームワークにあるクラスのインスタンスを注入します。
現在、一部の人々は、ライブラリが十分に安定しており、頻繁に変更されない場合、それをラップする必要はないと主張します。したがって、それZend_Mail
が安定しており、変更されず、私のニーズに完全に適合すると仮定すると、そのためのラッパーは必要ありません。
次にLogger
依存する私のクラスを見てみましょうZend_Mail
:
class Logger{
private $mailer;
function __construct(Zend_Mail $mail){
$this->mail=$mail;
}
function toBeTestedFunction(){
//Some code
$this->mail->setTo('some value');
$this->mail->setSubject('some value');
$this->mail->setBody('some value');
$this->mail->send();
//Some
}
}
ただし、ユニットテストでは、一度に1つのコンポーネントをテストする必要があるため、Zend_Mail
クラスをモックする必要があります。さらに、クラスが抽象ではなく結石に依存するようになったため、依存関係反転の原則に違反してLogger
います。
Logger
ラップせずに単独でテストするにはどうすればよいZend_Mail
ですか?
コードはPHPにありますが、答えはそうである必要はありません。これは、言語固有の機能というよりも設計上の問題です