[英]How to unit test a method that creates a Zend\Db\Sql\Sql object?
我有要進行單元測試的方法。 由於它是在方法內部創建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並將其注冊為服務(在服務管理器配置中的factory參數中),這樣您可以輕松地模擬服務以及從中獲取的對象。
為了進一步探討該主題,我將所有對象創建委托給可以使用ServiceManager調用的工廠。 事實是這樣,我可以隔離測試我的Factory,注入它所需的所有依賴項,斷言所創建的實際對象是預期的對象。 每當我在測試方法中需要Factory中的對象時,我都可以提供真實實例或Mock。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.