Я бы написал обертку вокруг вызовов веб-службы в приложении.
Пример в псевдокоде
CallWebService (action, options,...) {
// Code for connectiong to Webservice
}
Тогда вы просто высмеиваете эту функцию, просто как любую другую функцию
CallWebService (action, options,...) {
return true;
}
Таким образом, вы можете издеваться над веб-сервисом, не беспокоясь о том, что он является веб-сервисом, подключением к базе данных или чем-то еще. И вы можете сделать так, чтобы он возвращал значение true или что-то еще.
Удачи
UPDATE
Чтобы продвинуть эту идею на шаг вперед и сделать ваши тесты еще более мощными, вы можете использовать какие-либо параметры тестирования или параметры среды для управления тем, что происходит в методе фиктивного веб-сервиса. Затем вы можете успешно проверить, как ваши коды обрабатывают различные ответы от веб-сервисов.
Опять в псевдокоде:
CallWebService (action, options,...) {
if TEST_WEBSERVICE_PARAMETER == CORRUPT_XML
return "<xml><</xmy>";
else if TEST_WEBSERVICE_PARAMETER == TIME_OUT
return wait(5000);
else if TEST_WEBSERVICE_PARAMETER == EMPTY_XML
return "";
else if TEST_WEBSERVICE_PARAMETER == REALLY_LONG_XML_RESPONSE
return generate_xml_response(1000000);
}
И соответствующие тесты:
should_raise_error_on_empty_xml_response_from_webservice() {
TEST_WEBSERVICE_PARAMETER = EMPTY_XML;
CallWebService(action, option, ...);
assert_error_was_raised(EMPTY_RESPONSE_FROM_WEBSERVICE);
assert_written_in_log(EMPTY_RESPONSE_LOG_MESSAGE);
}
...
И так далее, вы поняли.
Обратите внимание, что все мои примеры - это тесты с отрицательным тестом, но это, конечно, можно использовать и для тестирования тестов с положительным тестом.