-- davidwinterbottom <[EMAIL PROTECTED]> wrote
(on Tuesday, 24 June 2008, 11:45 PM -0700):
> When you have an active record style model that uses a db adapter from a
> registry, what's the best practise for unit testing?  Do you use a mock
> object in the registry, use a test database, clean up the dev database after
> inserting new records, or something else?
> 
> For instance, my User model has a save method like...
> 
> class User ....
> 
>         public function save() {
>              ...
>              $Db = Zend_Registry::get(REGISTRY_DB);
>              if ($this->id) {
>                  $Db->update(self::TABLE, $attributes, 'UserId='.$this->id);
>              } else {
>                  $attributes['DateCreated'] = date(MYSQL_DATE_FORMAT);
>                  $Db->insert(self::TABLE, $attributes);
>                  $this->id = $Db->lastInsertId();
>             }
>         }
> 
> and so, as the db adapter is held in a registry, it is not as
> straightforward as normal to pass in a mock object for the db adapter.  How
> do other people manage this situation (which must be awfully common)?  Do
> you just allow yourself to write to the normal db and clean up afterwards
> (so there aren't loads of test users in there)?  Or use a special testing db
> so the mess doesn't matter?  Or something I've not thought of?

I usually use one of the following approaches:

 * Test DB (usually sqlite, so I don't have to depend on network access
   or a running DB server on my machine).
 * In-memory sqlite database. This usually requires a little more setup
   in your test harness, but the speed is unbeatable.

If you look at how Rails recommends testing, both of the above fit in
with their recommendations -- separate dataset for testing than for
production.

-- 
Matthew Weier O'Phinney
Software Architect       | [EMAIL PROTECTED]
Zend Framework           | http://framework.zend.com/

Reply via email to