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

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

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


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


Ответы (2)


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

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

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

person Jonas Söderström    schedule 16.08.2010
comment
Я думаю, что это хорошее решение. Я сделал @протокол и два @интерфейса, которые его реализуют. Кажется, это работает :) - person matma; 19.08.2010
comment
Рад, что вам понравился ответ. Я обновил его, добавив способ сделать тесты еще более мощными, чтобы проверить, как ваши системы обрабатывают ответы от веб-служб. - person Jonas Söderström; 20.08.2010

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

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

person samsam    schedule 16.08.2010
comment
это точно так же, как я сделал - person vodkhang; 16.08.2010