Использовали ли вы XCTest для модульного тестирования в iOS?

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

Ответ

Да, активно использовал XCTest для модульного тестирования (Unit Testing).

Что тестировал:

  • Модели данных: Валидация, преобразования форматов, бизнес-правила.
  • Бизнес-логика: Сервисы, утилиты, менеджеры.
  • ViewModel/Presenter: Проверка корректности выходных состояний на основе входных данных и действий.

Пример теста для валидатора email:

import XCTest
@testable import MyApp

class EmailValidatorTests: XCTestCase {
    func testValidEmail() {
        let validator = EmailValidator()
        XCTAssertTrue(validator.isValid("user@example.com"))
    }

    func testInvalidEmail() {
        let validator = EmailValidator()
        XCTAssertFalse(validator.isValid("invalid-email"))
    }

    func testEmptyEmail() {
        let validator = EmailValidator()
        XCTAssertFalse(validator.isValid(""))
    }
}

Практики:

  • Мокирование: Использовал протоколы для создания mock-объектов зависимостей.
  • Асинхронность: Применял XCTestExpectation для тестирования асинхронного кода.
  • Покрытие: Стремился к покрытию ключевой логики на уровне 60-80%.