Mocking External Services
Should your tests mock outside services or not? I keep seeing discussions on this topic. On the one hand, it lets your tests be in control of the testing context. Otherwise it may be very difficult to create a reliable automated test.
- The external service might return different results at different times.
 - The external service might be slow to respond.
 - Using the external service might require running the test in a particular environment.
 - It may be impossible to generate certain error conditions with the real service.
 - There may be side-effects of using the real service.
 
On the other hand, our mock of the external service might differ from it in important ways.
- Our mock service might have a slightly different interface than the real one.
 - Our mock service might accept slightly different parameters than the real one.
 - Our mock service might return slightly different results than the real one.
 - The real service might change behavior, and we won’t notice until we deploy to production.
 
This leaves us in a quandary. What to do? Read More