Какие инструменты и фреймворки вы использовали для написания тестов в iOS?

«Какие инструменты и фреймворки вы использовали для написания тестов в iOS?» — вопрос из категории Тестирование, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для тестирования iOS-приложений применял следующий стек инструментов:

1. Модульные (Unit) и интеграционные тесты:

  • XCTest: Стандартный и основной фреймворк от Apple.
    class NetworkServiceTests: XCTestCase {
        func testDecodingValidResponse() throws {
            let jsonData = mockValidJSON.data(using: .utf8)!
            let model = try JSONDecoder().decode(MyModel.self, from: jsonData)
            XCTAssertEqual(model.id, 123)
            XCTAssertEqual(model.title, "Test Title")
        }
    }
  • Quick/Nimble: Для поведения-ориентированного разработки (BDD), делает тесты более читаемыми.

2. Моки и стабы:

  • Протоколы и ручные моки: Основной подход для инъекции зависимостей.
  • Cuckoo: Генератор мок-классов на этапе компиляции.
  • OHHTTPStubs / URLProtocol: Для стабирования сетевых запросов в тестах.

3. UI-тестирование:

  • XCUITest: Нативный фреймворк для автоматизации взаимодействия с интерфейсом.

4. Snapshot-тестирование:

  • iOSSnapshotTestCase (FBSnapshotTestCase): Классическая библиотека для сравнения скриншотов.
  • SnapshotTesting: Более современная и гибкая Swift-библиотека.

Выбор инструмента зависит от задачи: XCTest — для большинства unit-тестов, Quick/Nimble — для сложной бизнес-логики, SnapshotTesting — для проверки неизменности UI.