0
我有這種方法,我想單元測試。由於它在方法內部創建了Sql對象,我不能嘲笑它。如何對創建Zend Db Sql Sql對象的方法進行單元測試?
最初我想讓Sql成爲一個實例屬性,除了每當我在其他方法中使用它時都必須重置它,這很可能導致難以調試錯誤(我不想這種可能性如果可以避免的話,可以在其他後續調用getter時獲得一個「髒」的Sql對象)。
測試這些類型的方法的常見模式是什麼?
public function getConfigFromDb()
{
if (!is_null($this->configInDb)) {
return $this->configInDb;
}
$sql = new Sql($this->getSlaveDbAdapter());
$select = $sql->select()
->from('mytable');
$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();
$results->buffer();
$this->configInDb = $return;
return $results;
}
在你的情況下,我會添加一個SqlFactory並將其註冊爲一個服務(在服務管理器配置中的工廠參數中),這樣你就可以輕鬆地模擬服務和從中獲得的對象。 – SmasherHell
@SmasherHell你爲什麼發佈這個評論而不是答案?這看起來非常合理。 – Julian