Какой у вас опыт написания тестов для iOS-приложений?

Ответ

Да, есть опыт написания модульных (unit) и UI-тестов.

Инструменты и подходы:

  • Модульные тесты: XCTest, иногда с Quick/Nimble для BDD-стиля.
  • UI-тесты: XCTest с XCUIApplication для автоматизации ключевых пользовательских сценариев.

Пример модульного теста для декодирования модели:

func testUserModelDecoding() throws {
    // 1. Arrange (Подготовка данных)
    let json = """
    {
        "id": 1,
        "name": "John"
    }
    """.data(using: .utf8)!

    // 2. Act (Выполнение действия)
    let user = try JSONDecoder().decode(User.self, from: json)

    // 3. Assert (Проверка результата)
    XCTAssertEqual(user.id, 1)
    XCTAssertEqual(user.name, "John")
}

Практика: Стараюсь покрывать тестами критическую бизнес-логику и сложные взаимодействия, поддерживая баланс между качеством покрытия и скоростью разработки.

Ответ 18+ 🔞

А, тесты, говоришь? Ну да, приходилось, блядь, этим заниматься, не без греха.

Чем баловался и как:

  • Модульные (unit): В основном, конечно, XCTest, этот старый добрый. Бывало, для разнообразия и читаемости подключал Quick с Nimble — чтобы прям как на человеческом языке сценарии описывать, типа it("should decode user correctly").
  • UI-тесты: Тоже XCTest, но уже с этим XCUIApplication. По сути, заставляешь приложение, как обезьяну дрессированную, по экрану тыкаться, чтобы ключевые сценарии проверить: залогиниться, покупку оформить — всё это безобразие.

Вот, смотри, как обычно модульный тест на коленке клепается, на примере декодирования какой-нибудь модели:

func testUserModelDecoding() throws {
    // 1. Arrange (Готовим почву, блядь)
    let json = """
    {
        "id": 1,
        "name": "John"
    }
    """.data(using: .utf8)!

    // 2. Act (Делаем самое интересное)
    let user = try JSONDecoder().decode(User.self, from: json)

    // 3. Assert (А теперь проверяем, не обосрались ли мы)
    XCTAssertEqual(user.id, 1)
    XCTAssertEqual(user.name, "John")
}

А по жизни как? Стараюсь, конечно, не ебать себе мозг попытками покрыть каждую строчку кода — это путь в никуда, чистая профанация. Бью по самому больному: критическая бизнес-логика, эти ваши сложные взаимодействия между сервисами, где один чих — и всё, пиздец. Главное — найти баланс, чтобы и качество было, и чтобы тесты сами по себе не превращались в отдельный адский проект на поддержку.