Как заглушить сетевые запросы на UITesting
Есть ли способ заглушить сетевые запросы для UITests, которые написаны на Swift?
Я уже установил модули OHHTTPStubs, но не смог заблокировать сетевые запросы, используя его методы, потому что цель UITest и цель приложения выполняются в разных потоках.
Я буду признателен за любые рекомендации.
2 ответа
У вас есть два варианта здесь:
Вы можете принять подход Олетхи и коснуться сети в коде вашего приложения. Вам нужно будет заглушить NSURLSession, чтобы внедрить нужный ответ, и использовать некоторые аргументы запуска, чтобы определить, когда использовать стаб-сеанс вместо обычного. Более подробно в этой статье о том, как это сделать: http://masilotti.com/ui-testing-stub-network-data/
Вы можете запустить локальный сервер и внедрить ваши данные прямо из тестового кода. Огромным преимуществом является то, что вам совсем не нужно трогать код приложения. Вы также можете легко изменить свой ответ во время теста, что невозможно при первом решении.
Чтобы запустить локальный сервер, у вас есть несколько вариантов. Я использую Swifter, но есть и другие варианты: Ambassador и SBUITestTunnel.
Какое бы решение вы ни выбрали, общий процесс выглядит следующим образом:
- Передайте аргумент запуска, чтобы определить, что вы используете UITests
- Поймать этот аргумент запуска в
application:didFinishLaunchingWithOptions:
и переключите базовый URL-адрес API на локальный сервер: http://localhost/ - Запустите свой сервер
- Введите свой ответ для URL, который вы тестируете
У вас есть более подробный подход в этой статье для Swifter
Заглушка должна выполняться в тестируемом приложении, а не в тестовом коде. Это связано с тем, что процесс тестирования пользовательского интерфейса не контролирует работу сети тестируемого приложения, поскольку они отделены друг от друга.
Отправьте аргумент запуска, когда вы запускаете приложение из своего теста, и прочитайте аргумент запуска в своем приложении, чтобы вызвать заглушки как часть application:didFinishLaunchingWithOptions:
в вашем AppDelegate
,
let app = XCUIApplication()
app.launchArguments = ["stub"]
app.launch()