Introduction
System integrations are traditionally a very difficult thing to test. Most commercial products, as well as home-cooked integrations, have no built-in support for automated testing. This usually results in verifying integration behavior through a manual approach involving triggering events/messages/requests from one window, and watching the end results in the affected systems. This approach has the following drawbacks:
It is extremely time consuming, and inevitably leads to poor test coverage
It is very difficult to test error conditions such as a system outage at just the wrong part of your integration flow
It is complicated to verify the performance of integration code in isolation, as well as performing similar non-functional tests such as saturation testing
It leaves no artifacts that can be used to detect regressions
Another fundamental problem with testing integrations using live backend systems is that it relies on the availability of those systems. This leaves your development...