DBI backend tests
Derek Atkins
warlord at MIT.EDU
Tue Sep 1 14:22:14 EDT 2009
John Ralls <jralls at ceridwen.fremont.ca.us> writes:
> 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
> one...)
I suspect that writing a SQL parser that matched the MySQL and PG SQL
parsers would be much more work than just calling out to the databases
directly.
We write out to test data files; I don't see why we can't write out to a
test database too.
Josh's suggestion of a configure switch is great, and it's something you
can do while developing the code but means that 'distcheck' wont grab it
(which is probably okay).
> Regards,
> John Ralls
-derek
--
Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
Member, MIT Student Information Processing Board (SIPB)
URL: http://web.mit.edu/warlord/ PP-ASEL-IA N1NWH
warlord at MIT.EDU PGP key available
More information about the gnucash-devel
mailing list