0Pricing
Swift Academy · Урок

Настройка XCTestCase, очистка и методы тестирования

Структурируйте классы тестов с setUp/tearDown и давайте имена методам тестирования.

«Настройка XCTestCase, очистка и методы тестирования» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Основы XCTestCase

XCTestCase — базовый класс для всех модульных тестов Swift. Каждый метод, начинающийся с «тест», является тестовым случаем.

import XCTest

final class MathTests: XCTestCase {
  func testAddition() {
    XCTAssertEqual(2 + 2, 4)
  }
}

setUp и tearDown

setUp() выполняется перед каждым тестом. tearDown() выполняется после каждого теста. Используйте их для инициализации общего состояния и очистки.

final class UserServiceTests: XCTestCase {
  var sut: UserService!
  override func setUp() {
    super.setUp()
    sut = UserService()
  }
  override func tearDown() {
    sut = nil
    super.tearDown()
  }
}

setUpWithError и tearDownWithError

Варианты setUp/tearDown, которые могут выдавать ошибки: если настройка завершается ошибкой, тест автоматически помечается как не пройденный.

override func setUpWithError() throws {
  sut = try UserService(config: loadTestConfig())
}
override func tearDownWithError() throws {
  try sut.cleanup()
}

Настройка на уровне класса

class setUp() и class tearDown() выполняются один раз до и после всех тестов в классе — это удобно для дорогостоящих общих ресурсов.

final class DBTests: XCTestCase {
  static var db: TestDatabase!
  override class func setUp() {
    super.setUp()
    db = TestDatabase.inMemory()
  }
  override class func tearDown() {
    db.close()
    super.tearDown()
  }
}

Именование методов тестов

Называйте тесты в формате test_methodName_condition_expectedResult, чтобы повысить читаемость и сделать сообщения об ошибках понятными.

func test_login_withValidCredentials_returnsUser() throws { ... }
func test_login_withInvalidPassword_throwsUnauthorized() throws { ... }

addTeardownBlock

Регистрируйте блоки очистки для отдельных тестов непосредственно в коде, не переопределяя tearDown.

func testCreateFile() throws {
  let url = FileManager.default.temporaryDirectory.appendingPathComponent("test.txt")
  addTeardownBlock { try? FileManager.default.removeItem(at: url) }
  // ... test
}

Отключение тестов

Добавьте префикс _ к методу теста или закомментируйте его, чтобы пропустить тест. XCTest также поддерживает пропуск с помощью XCTSkipIf.

func testExperimentalFeature() throws {
  try XCTSkipIf(ProcessInfo.processInfo.environment["CI"] != nil, "Skip on CI")
  // ... test
}

Методы тестов не могут выдавать ошибки (до Xcode 16)

В более ранних версиях Xcode методы тестов, объявленные с throws, передают ошибки как сбои тестов через XCTAssertNoThrow.

func testDecode() throws {
  let user = try JSONDecoder().decode(User.self, from: validJSON)
  XCTAssertEqual(user.name, "Alice")
}

Явное проваливание теста

Вызовите XCTFail("reason"), чтобы принудительно завершить тест с ошибкой и описательным сообщением.

func testCallback() {
  var called = false
  service.doWork { called = true }
  if !called { XCTFail("Callback was never invoked") }
}

Планы тестирования

Планы тестирования Xcode позволяют запускать одни и те же тесты с разными конфигурациями (языком, переменными окружения и санитайзерами).

// File → New → Test Plan
// Add test targets and configure per-configuration env vars
// Useful for running localized UI tests or with Address Sanitizer

Параллельное тестирование

Включите параллельное тестирование в настройках схемы Xcode, чтобы одновременно запускать классы тестов и сокращать общее время тестирования.

// Product → Scheme → Test → Options → Execute in parallel
// Each XCTestCase class runs in a separate process
// Ensure tests are independent and don't share global state

Быстрая проверка

Какой метод XCTestCase выполняется один раз перед всеми тестами в классе, а не перед каждым отдельным тестом?

Итоги урока

Переопределяйте setUp/tearDown (или варианты, которые могут выдавать ошибки) для настройки и очистки перед каждым тестом. Используйте class setUp/tearDown для ресурсов, общих для всего класса. Давайте тестам описательные имена. Используйте addTeardownBlock для очистки непосредственно в коде и XCTSkipIf для условного пропуска.

Часто задаваемые вопросы

Урок «Настройка XCTestCase, очистка и методы тестирования» бесплатный?

Да — полный текст урока «Настройка XCTestCase, очистка и методы тестирования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «Настройка XCTestCase, очистка и методы тестирования»?

Структурируйте классы тестов с setUp/tearDown и давайте имена методам тестирования. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Настройка XCTestCase, очистка и методы тестирования»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Настройка XCTestCase, очистка и методы тестирования
  2. Семейство XCTAssert и утверждения с выбрасыванием ошибок
  3. Имитация на основе протоколов и внедрение зависимостей
  4. Асинхронные тесты и измерение производительности
← Назад к Swift Academy