On Tue, Dec 10, 2013 at 2:34 PM, Julian Vidal <jul...@julianvidal.com> 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            | matt...@zend.com
Zend Framework          | http://framework.zend.com/
PGP key: http://framework.zend.com/zf-matthew-pgp-key.asc

-- 
List: fw-general@lists.zend.com
Info: http://framework.zend.com/archives
Unsubscribe: fw-general-unsubscr...@lists.zend.com


Reply via email to