On 01/07/12 13:49, Christian Aistleitner wrote:
> One might think so, yes.
> But as I said, one would mock /above/ the SQL layer.
> For typical database operations, SQL would not even get generated in
> the first place!
> 
> Consider for example code containing
>   $db->insert( $param1, $param2, ... );
> 
> The mock db's insert function would compare $param1, $param2,
> ... against the invocations the test setup injected. If there is no
> match, the test fails. If there is a match, the mock returns the
> corresponding return value right away.
> No generating SQL.
> No call to $db->tableName.
> No call to $db->makeList.
> No call to $db->query.
> No nothing. \o/
> 
> But maybe you hinted at DatabaseBase::query?
> DatabaseBase::query should not be used directly, and it's hardly
> is. We can go for straight for parameter comparison there as well. No
> need to parse the SQL.
> 
> 
> Unit testing is about decoupling and testing things in isolation. With
> DatabaseBase and the corresponding factories, MediaWiki has a layer
> that naturally decouples business logic from direct database access.
> 
> Use the decoupling, Luke!
> 
> Christian

I was thinking on it. Some operations are "easy", insert a field, select
a field, you can perform the joins in php.
But you also need table schema knowledge. select('*', 'user'), insert()
which is generating a new id, an insert which is violating uniqueness of
a primary key, transactions...
It can obviously be done, but beware of the corner cases! As nifty as it
would be, it may need quite more effort than expected.


_______________________________________________
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to