반응형
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 어렵지 않아요!
- 테스트 클래스 만든다
setUp에서 준비- 테스트 함수(
test로 시작) XCTAssert로 검사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 |