Есть ли способ издеваться над запросами при написании автоматизированных тестов пользовательского интерфейса в Swift 2.0. Насколько мне известно, тесты пользовательского интерфейса должны быть независимы от других функций. Есть ли способ издеваться над ответом от запросов сервера, чтобы проверить поведение пользовательского интерфейса, зависящего от ответа. Например, если сервер не работает, тесты пользовательского интерфейса все равно должны выполняться. Быстрый пример, для входа в систему, mock, если пароль был неудачным, тогда пользовательский интерфейс должен показывать предупреждение, однако, если вход успешно завершен, следует показать следующую страницу.
Mock API просит Xcode 7 Swift Automated UI Testing
Ответ 1
В своей текущей реализации это невозможно напрямую с тестированием пользовательского интерфейса. Единственный интерфейс, который имеет каркас непосредственно с кодом, через него запускает аргументы/среду.
В этом контексте приложение может искать определенный ключ или значение и переключать некоторые функции. Например, если установлен ключ MOCK_REQUESTS
, введите MockableHTTPClient
вместо реального HTTPClient
в сетевом уровне. Я писал о настройке параметров, а в NSHipster есть статья о как их читать.
Хотя это и не идеально, технически возможно выполнить то, что вы ищете, с некоторой работой.
Здесь учебник по обучению сетевых данных для тестирования пользовательского интерфейса. Он просматривает все шаги, необходимые для запуска и запуска.
Ответ 2
Если вас беспокоит мысль о том, что издевательства превращаются в производственную среду по какой-либо причине, вы можете рассмотреть возможность использования стороннего решения, такого как Charles Proxy.
Используя локальный инструмент map, вы можете направлять вызовы с определенной конечной точки на локальный файл на вашем компьютере. Вы можете пропустить обычный текст в локальном файле, содержащий ответ, который вы хотите вернуть. В вашем примере:
Вход в систему для входа в систему endpoint yoursite.com/login
в Charles вы используете локальный инструмент карты, вы можете маршрутизировать вызовы, ударяющие эту конечную точку, в файл, сохраненный на вашем компьютере. i.e mappedlocal.txt
mappedlocal.txt содержит следующий текст
Ошибка HTTP/1.1 404
Когда Чарльз работает, и вы попали в эту конечную точку, ваш ответ вернется с ошибкой 404.
Вы также можете использовать еще один вариант в Charles, называемый "map remote", и построить весь макетный сервер, который может обрабатывать вызовы и ответы по вашему желанию. Это может быть не совсем то, что вы ищете, но это вариант, который может помочь другим, и тот, который я использую сам.