Mocking a database is a really bad idea -- it is too easy to get transaction behavior subtly (or vastly) wrong, as mentioned; but also, there are subtleties involved in transaction isolation, sequences and auto-increment behavior, data types (especially fixed decimal and date/time), and functions.
Mocking distribution may be even worse. The failures simulated locally aren't quite the same as the real thing, timing is different, and it's easy to get subtle errors due to updates to shared state (that wouldn't be shared in a real distributed system).