Как тестировать сложные распределенные системы?
Посмотрите, например, Vagrant
habrahabr.ru/post/140714/
Цель интеграционного тестирования заключается в том, чтобы взаимодействие определенных подсистем не нарушало установленного контракта.
Вы можете использовать мокирование — имитировать эталонные ответы какого-либо сервиса. Например Mockito
А вообще хорошо бы иметь функциональные тесты — покрывающие бизнес-требования и прогонять их на QA окружении, максимально похожим на production.