當我理解單元測試與另一個對象(「有一個」關係)有構成關係的對象時,如果您正在使用某種類型的依賴注入,您只能真正地模擬組合對象。因此,下面的代碼種類化妝單元測試非常困難的,並且可能因此被認爲是壞的事情:沒有依賴注入的對象組合是壞事嗎?
<?php
class aSampleClass {
private $dependency;
public function __construct() {
$this->dependency = new otherClass;
}
}
該玩具例子很容易通過使otherClass
對象的實例作爲一個參數轉換爲使用依賴注入到構造函數,但情況並非總是如此。上述形式的對象組合(其中「新」運算符直接用於類實現中)是一件壞事?你是否應該總是試着寫一個班級,以便它能夠完全獨立於其關聯進行測試?
使用依賴注入似乎當您使用簡單的值對象(在領域驅動設計的說法),如日期或貨幣對象爲我擱淺。在這些情況下,直接實例化有問題的Value對象似乎是有意義的。例如:
<?php
class anotherSampleClass {
public function getTimeDifferencePhrase() {
$now = new date_Time;
$then = new date_Time(time()-60*60*24);
return $now->relativeTimePhrase($then);
}
}
當然,在這個例子中,它使的anotherSampleClass
單元測試更有意義,也鍛鍊了date_Time
對象的實現,而不是試圖使用模擬對象或測試雙打。
想法?