Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Макет веб-сервиса для iPhone

Автор вопроса: matmaОтветов: 2

Я хочу сделать приложение для iPhone, как введение в программирование на ObjC и Cocoa. Я .net-разработчик, поэтому программирование на Mac - это целый новый мир, который я открываю для себя :)

Мое приложение будет общаться с веб-службой. Я хочу использовать iCuke в качестве среды тестирования и не хочу каждый раз подключаться к этому веб-сервису. время, когда я запускал набор тестов. Итак, как я могу смоделировать ответ веб-сервиса для тестирования? Одним из решений может быть использование SoapUI, но, возможно, есть решение, не использующее внешние инструменты.

  • Если вы пишете серверную часть, рассмотрите возможность использования подхода RESTful, чтобы уменьшить накладные расходы на телеграфную передачу и обработку. Я нашел несколько хороших писателей/парсеров JSON для iOS, но не нашел хороших библиотек SOAP. Самое близкое, что вам нужно, это кошмарная генерация кода wsdl2objc. Justin 16.08.2010
  • Нет, я не мог использовать REST, только чистое SOAP :( matma 16.08.2010

iphonetestingmocking

Ответы

Ответ 1 · рейтинг 1 · Jonas Söderström

Я бы написал оболочку для вызовов веб-службы в приложении.
Пример в псевдокоде

CallWebService (action, options,...) {
    // Code for connectiong to Webservice
}

Затем вы просто издеваетесь над этой функцией, просто вам нужна любая другая функция

CallWebService (action, options,...) {
    return true;
}

Таким образом, вы можете издеваться над веб-службой, не беспокоясь о том, что это веб-служба, соединение с базой данных или что-то еще. И вы можете вернуть его true или что-то еще.

Удачи

ОБНОВЛЕНИЕ

Чтобы продвинуть эту идею еще на один шаг вперед и сделать ваши тесты еще более мощными, вы можете использовать какие-то параметры теста или параметры среды для управления тем, что происходит в методе mocked off webservice. Затем вы можете успешно протестировать, как ваши коды обрабатывают различные ответы веб-сервисов.
Снова в псевдокоде:

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);
}
...

И так далее, вы поняли. Обратите внимание, что все мои примеры являются отрицательными тестовыми наборами, но, конечно, их можно использовать и для тестирования положительных тестовых случаев.

Ответ 2 · рейтинг 1 · samsam

Я не уверен, подходит ли мое решение для ваших нужд, но, возможно, мой вклад поможет здесь. Я использую довольно много разных веб-сервисов в своем приложении, все они используют вывод xml, поэтому то, что я сделал для целей тестирования, заключалось в написании файлов mock-xml и в моем приложении вместо использования самого веб-сервиса с использованием статических тестовых XML-файлов, размещенных на веб сервер.

Я сделал это в основном потому, что вывод xml был определен, и поэтому я мог реализовать свой синтаксический анализатор и остальную часть приложения, в то время как сам сервис разрабатывался одновременно.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы