On Tue, Dec 10, 2013 at 2:34 PM, Julian Vidal <[email protected]> wrote:
> 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 up.
>
> 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.
>
> What's the common pattern for testing these kinds of methods?

I would write a separate method for the SQL creation. That way you can
unit test against the Sql instance that returns, and only do
integration or functional testing on the method that consumes it.

So:
    public function prepareConfigSql(\Zend\Db\Adapter\Adapter $adapter)
    {
        $sql = new Sql($adapter);
        $select = $sql->select()->from('languages');
        return $select;
    }

Inside your getConfigFromDb() method, you'd do this:

        $select = $this->prepareConfigSql($this->getSlaveDbAdapter());

This allows you to unit test the prepareConfigSql() method and do
assertions on the Select instance it returns, even using a mock
adapter if desired.


> Here's a link to the gist in case this syntax highlighter screws things up:
> https://gist.github.com/poisa/7898032
>
>     public function getConfigFromDb()
>     {
>         if (!is_null($this->configInDb)) {
>             return $this->configInDb;
>         }
>
>         $sql = new Sql($this->getSlaveDbAdapter());
>
>         $select = $sql->select()
>                       ->from('languages');
>
>         $statement = $sql->prepareStatementForSqlObject($select);
>         $results   = $statement->execute();
>         $results->buffer();
>
>         $return = array();
>
>         foreach ($results as $r) {
>             $return[] = $r;
>         }
>
>         $this->configInDb = $return;
>
>         return $return;
>     }



-- 
Matthew Weier O'Phinney
Project Lead            | [email protected]
Zend Framework          | http://framework.zend.com/
PGP key: http://framework.zend.com/zf-matthew-pgp-key.asc

-- 
List: [email protected]
Info: http://framework.zend.com/archives
Unsubscribe: [email protected]


Reply via email to