IMHO, testing on databases should always be on real databases. The main point is that testing of code should take into account the full environment in where the code operates. This avoids running into issues where the code is ran in the actual environment and suddenly fails.
So I always suggest to use a database on the RDBMS which is used in production as well, use a script to setup the catalog if you want to, run the tests, drop the catalog.
We ourselves use different databases for different parts of the system: one for reads, one for writes and one for inheritance scenarios (read and write). The one for writes (which reads back the data written) is clearing the data with a truncating stored proc called after the tests are done (in the teardown). This requires little setup, and you can run them every time, knowing they actually hit the database and do the full roundtrip, on the database they have to work on in production as well.
IMHO it's really a little price to pay for great benefits: you know things ran ok in a real setup as well, so you won't run into surprises when you move your code to production.
If you really really want to use a different setup, you can use firebird embedded, and simply create a mapping on firebird as well, create a firebird database from that (it's a single file), then use firebird embedded dll (and a small adjustment to the connection string) and before testing, simply copy the database file (which is empty) to the test folder, then do the tests, after the tests, delete the file. But IMHO a proc which truncates tables in the right order is as easy as this.