Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : xctest, expectation, async, await, mock, network

Как тестировать асинхронные операции (например, сетевые запросы)?

Вопрос проверяет умение синхронизировать ожидание результатов внутри XCTest и обрабатывать колбэки или async/await.

Короткий ответ

В XCTest используют XCTestExpectation, вызывая expectation(description:) и wait(for:timeout:) или пишут async-тест с async/await, где просто await нужной функции. Для сетевых запросов применяют моки URLProtocol или URLSession с URLSessionConfiguration.ephemeral и protocolClasses, чтобы возвращать фиктивные данные.

Длинный ответ

С XCTestExpectation:

func testFetch() {
    	let exp = expectation(description: "Fetch data")
    	network.fetchData { result in
        	XCTAssertNotNil(result)
        	exp.fulfill()
    	}
    	wait(for: [exp], timeout: 2)
}

С async/await в XCTest:

func testFetchAsync() async throws {
    	let data = try await network.fetchData()
    	XCTAssertEqual(data.count, expectedCount)
}

Mock URLSession:

  • Реализовать свой URLProtocol, перехватывающий запросы и возвращающий заранее заданный ответ.

  • Подставить его в URLSessionConfiguration.

Избегание реальных сетей:

  • Безопаснее и быстрее использовать фейковые ответы, чтобы тесты не падали при отсутствии сети.

Вывод:
Ожидания в XCTest и мок-сессии позволяют надёжно тестировать асинхронный код с контролируемыми сценариями без зависимости от внешних сервисов.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Swift

    Swift

Ключевые слова

#xctest

#expectation

#async

#await

#mock

#network

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.