簡體   English   中英

如何對創建Zend \\ Db \\ Sql \\ Sql對象的方法進行單元測試?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM