Matthew,

Thanks for your answer. Going a little step further... as you can imagine
I'll be using the Sql object _many_ times in application. Does it makes
sense to create an Sql service with mainly 4 methods that given an adapter,
each return a Select(), Insert(), Update(), Delete() objects? (without the
from(), since I'll need to change that in every case)

Is this overkill? In my head it sounds reasonable but since I've never seen
it done I might be missing something.

Julian.


On Thu, Dec 12, 2013 at 10:00 AM, Matthew Weier O'Phinney
<matt...@zend.com>wrote:

> 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