I agree that fakes are very good for testing, with one caveat: the fakes must be owned by the same folks that own the real implementation.
When fakes are owned by anyone else, e.g. the folks writing the system under test, there's a high risk that the semantics of the fake and the real implementation will diverge, rendering the tests that use the fakes much less useful.