如何单元测试创​​建Zend \ Db \ Sql \ Sql对象的方法?

I have this method that I would like to unit test. Since it's creating the Sql object inside the method, I can't mock it.

Initially I thought about making Sql be an instance property except that I'd have to reset it every time I use it in other methods and this will most likely lead to hard to debug errors (I don't want the possibility to get a "dirty" Sql object on other subsequent calls to its getter if at all avoidable).

What's the common pattern for testing these kinds of methods?

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;
}

@Julian you're right, I'll put it as an answer

In this case, I would add a SqlFactory and register it as a service (in factories param in service manager config), that way you can easily mock the service and the objects you'll get from it.

To go further on the subject, I delegate all object creation to factories that I can call using ServiceManager. The fact is, that way, I can test my Factory in isolation, injecting all dependencies it needs, asserting that the actual object created is the expected object. And anytime I need an object from Factory in the method tested, I can serve a real instance, or a Mock.