The problem with this approach in practice is that the abstraction tends to leak real fast. One day you'll need to hack something ugly to fix a performance issue in prod or whatever and it all will come crashing down.
If you want to mock a database to have a fast subset of tests, first test the client the hard way and prove you’re using the real database correctly (not just asserting what you hope it would do).