The canonical answers are DBD::Mock (for a more purist solution) and DBD::SQLite (for a more practical solution). DBIx::Class (the current "premier Perl ORM", whatever that means) uses DBD::SQLite for all of its testing needs. This means you have a huge corpus of prior art to work from.
in reply to writing DBI applications offline
Note: DBD::SQLite implements a subset of ANSI SQL. This means that you will not be able to test things like triggers, views, stored procedures, etc. Nor will you be able to test usage of DBMS-specific functions or keywords (such as LIMIT, CONNECT BY, etc). For that, you will need to use DBD::Mock.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?