We wasted a lot of time on our last integration test on a bug that I think should have been found in unit testing. The problem was that an interface / service we called behaved different than we expected and the unit test didn't find this problem because we mocked that interface for the unit test and our mock was of course based on our mistaken interpretation of what the interface would do. Now I could be a bit angry at our dear coworker who provided the interface, because their description / specification of it (a terse JavaDoc comment) was ambiguous and contributed to our misunderstanding. On the other hand, I thought that the problem could have been avoided if those same coworkers had provided a mock implementation of their interface which we could call in our unit testing. Then the bug would have shown up much earlier and a lot of cursing could have been avoided.
Now, what's the best practice in organizing the creation of mock objects among teams who provide and use shared interfaces? What are your experiences?