ある種の依存関係注入を使用している場合、私が理解しているように、別のオブジェクトとの構成関係(「has-a」関係)を持つオブジェクトを単体テストすると、実際には合成オブジェクトをモックすることができます。したがって、以下のコードは、一種ユニットテストは非常に困難にし、従って悪いと見なされるかもしれない:依存性注入のないオブジェクトの構成は悪いですか?
<?php
class aSampleClass {
private $dependency;
public function __construct() {
$this->dependency = new otherClass;
}
}
このおもちゃの例は容易にパラメータとしてotherClass
オブジェクトのインスタンスを渡すことによって、依存性注入を使用して変換されますコンストラクタに渡しますが、必ずしもそうではありません。上記のフォームのオブジェクト構成(「new」演算子がクラス実装で直接使用される)が悪いのですか?あなたは常にそのクラスを書くようにして、そのクラスの関連性を完全にテストできるようにする必要がありますか?
日付や金銭オブジェクトなどの単純なバリューオブジェクト(ドメイン駆動設計の言い回し)を使用している場合、依存性注入を使用すると、私のためにうまく動作しているようです。そのような場合は、問題のValueオブジェクトを直接インスタンス化するのが理にかなっているようです。例えば:
<?php
class anotherSampleClass {
public function getTimeDifferencePhrase() {
$now = new date_Time;
$then = new date_Time(time()-60*60*24);
return $now->relativeTimePhrase($then);
}
}
は確かに、この例では、それはまた、かなりモックオブジェクトやテストダブルを使用しようとしてよりdate_Time
オブジェクトの実装を行使するanotherSampleClass
のユニットテストのためのより多くの意味があります。
思考?