DBI backend tests

John Ralls jralls at ceridwen.fremont.ca.us
Mon Aug 31 22:58:13 EDT 2009

On Aug 31, 2009, at 10:45 AM, Phil Longstaff wrote:

> I've started to write a DBI backend test.  Basically, it will create  
> a session with a set of data including (hopefully) all test cases.   
> It will then save that to a db, load it into another session, then  
> compare the data in the two sessions.
> There's no problem doing this for sqlite3 (just use /tmp/XXXXX).   
> However, since there are differences for mysql and pgsql, I'd like  
> to perform the test for all 3 databases.  Any ideas on how "make  
> check" could/should get urls for a mysql and pgsql database server  
> to use (or determine that there is no server available, so skip that  
> check)?  Argument to "make check" i.e. "make check -DMYSQL_URL=..."?

Yeah, don't. That is, don't actually talk to the real databases, just  
write a trivial pretend database (they're often called mocks) with the  
same function signatures and header names and so on so that you can  
build your test program with it instead of with pgsql or mysql.  
(Trivial so that the mock database doesn't need to be tested itself.)  
Ideally you should do the same for sqlite.

You can even provide accessors so that the test case can ask the mock  
database what it got, or preload it with data for the function being  
tested to retrieve.

You'll wind up with much better test cases. You will have to maintain  
the mock to keep it compliant with the database its pretending to be,  
but when it changes you'll wind up having to change the function  
you're testing anyway. This, by the way, is a really good reason *not*  
to use development builds of dependencies. (Not that I think you need  

John Ralls

More information about the gnucash-devel mailing list