iOS/Swift

Swift XCTest 정리 - 입문

ywangnon 2025. 4. 15. 22:52
반응형

XCTest란?

Swift로 앱 개발할 때 "내 코드가 잘 동작하는지 자동으로 검사해주는 도구"입니다.

쉽게 말하면:

테스트 전용 코드 작성 → Xcode가 실행 → 통과 or 실패 알려줌

사용하는 이유?

  • 버그 빨리 잡기
  • 리팩토링 후 안 깨졌는지 확인
  • 자동 검사 가능 (수작업 X)
  • TDD (Test Driven Development) 할 때 필수

어떻게 쓰나?

1. import XCTest

import XCTest

2. 테스트 전용 클래스 만들기

class UserManagerTests: XCTestCase {
    // 테스트 코드 여기에!
}

이름 끝에 Tests 붙이는게 약속!


XCTest 주요 기능 (진짜 자주 쓰는 것만)

기능 설명 예시
XCTAssertEqual 값이 같은지 검사 XCTAssertEqual(a, b)
XCTAssertTrue 참인지 검사 XCTAssertTrue(isLogin)
XCTAssertFalse 거짓인지 검사 XCTAssertFalse(isEmpty)
XCTAssertNil nil인지 검사 XCTAssertNil(user)
XCTAssertNotNil nil 아님 검사 XCTAssertNotNil(data)

테스트 함수 규칙

  • 함수 이름 꼭 test로 시작!

예시)

func testLoginSuccess() {
    let result = login(id: "test", pw: "1234")
    XCTAssertTrue(result)
}

비동기 테스트 (async/await)

Swift5.5 이후 → async/await 가능!

func testFetchUser() async throws {
    let user = try await api.fetchUser()
    XCTAssertEqual(user.name, "Swift")
}

Setup & Teardown 이 뭐냐?

테스트마다 매번 준비하고 정리해주는 함수

메서드 역할 타이밍
setUp() 테스트 실행 전에 호출 테스트 시작 직전
tearDown() 테스트 실행 후에 호출 테스트 끝난 직후

왜 필요한가?

  • 매 테스트마다 깨끗한 상태로 시작
  • 공통 코드 중복 제거
  • 메모리 정리 깔끔하게

예시로 보기

class UserManagerTests: XCTestCase {
    var userManager: UserManager!

    override func setUp() {
        super.setUp()
        userManager = UserManager()
    }

    override func tearDown() {
        userManager = nil
        super.tearDown()
    }

    func testLoginSuccess() {
        XCTAssertTrue(userManager.login(id: "test", pw: "1234"))
    }

    func testLoginFail() {
        XCTAssertFalse(userManager.login(id: "test", pw: "wrong"))
    }
}

핵심 정리 🧠

개념 한줄 요약
XCTest Swift 공식 테스트 도구
XCTAssert 값 비교, 체크
setUp() 테스트 준비
tearDown() 테스트 정리
테스트 함수 test 로 시작

결론 🔥

XCTest 어렵지 않아요!

  1. 테스트 클래스 만든다
  2. setUp에서 준비
  3. 테스트 함수(test로 시작)
  4. XCTAssert 로 검사
  5. tearDown에서 정리

이렇게만 기억하면 Swift 테스트 기본은 끝!

반응형

'iOS > Swift' 카테고리의 다른 글

iOS 화면 구성 시 자주 사용하는 Override 함수 정리 (UIView / UIViewController)  (0) 2025.04.19
CoreBluetooth - 입문  (0) 2025.04.17
CAEmitterCell  (0) 2025.04.12
CAEmitterLayer  (0) 2025.04.12
OSLog 요소  (0) 2025.04.11