Swift 개발자라면 반드시 알아야 할 새로운 공식 테스트 프레임워크, Swift Testing! WWDC24 세션에서 발표된 Swift Testing의 구조, 목적, 실제 사용법, 그리고 기존 XCTest와의 차이까지 한눈에 알 수 있도록 한 곳에 다 정리했습니다.
테스트란, 내 코드가 정상적으로 동작하는지 자동으로 체크해주는 프로그램입니다. 사용자 입력, 환경 변화, 코드 수정 등 어떠한 상황에도 버그 없이 Reliable하게 소프트웨어 품질을 유지하려면, 자동화된 테스트 코드는 필수!
테스트 코드는 실수를 최소화하고, 코드 변경에도 안정성을 보장하는 안전망 역할을 합니다.
Swift에서는 오래전부터 XCTest를 써왔으나,
Swift Testing은 이를 완전히 뒤집어,
@Test
func testSum() {
#expect(sum(2, 3) == 5)
}
설명:
@Test만 붙이면 즉시 테스트 함수로 등록! @Test
func testValue() {
#expect(value > 0) // 실패해도 다음 코드 계속
#require(result == expected) // 실패 시 즉시 종료!
}
#expect : 경고 형태 (soft failure) #require : 필수 조건 (hard failure)trait PositiveTrait {
#expect(value > 0)
}
@Test(trait: PositiveTrait)
func testPrice() {
let value = getPrice()
}
@Suite
struct MathTests {
@Test func testAdd() { #expect(1 + 2 == 3) }
@Test func testMultiply() { #expect(2 * 5 == 10) }
}
@Test(.tags(.network))
func testNetworkCall() { ... }
@Test(where: .platform(.ios))
func testFeatureOniOS() { ... }
@Test(arguments: [("A Beach"), ("By the Lake")])
func mentionedContinentCounts(videoName: String) async throws {
...
}
@Suite
struct StringSuite {
@Test func testIsEmpty() { let str = ""; #expect(str.isEmpty) }
@Test(arguments: ["swift", "apple"])
func startsWithS(str: String) { #expect(str.hasPrefix("s")) }
}
trait LengthTrait { #expect(str.count >= 0) }
@Test(trait: LengthTrait)
func testStringLength() { let str = "hello"; #expect(str.count == 5) }
@Suite
struct MathSuite {
@Test(arguments: [(1, 1, 2), (2, 3, 5)]) func testSum(a: Int, b: Int, expected: Int) { #expect(a + b == expected) }
@Test(where: .platform(.ios)) func testFeatureOniOS() { /* iOS에서만 실행 */ }
}
| 항목 | XCTest | Swift Testing |
|---|---|---|
| 선언 방식 | XCTestCase 클래스/함수명 규칙 | @Test/@Suite 자유 선언 |
| 검증 방식 | XCTAssert* | #expect, #require |
| 반복 테스트 | 제한적 | arguments 완전 지원 |
| Trait | 없음 | trait로 공통 규칙/검증 관리 |
| 그룹화 | 클래스/파일 단위 | @Suite 구조화(중첩/태그 가능) |
| 조건부 실행 | 별도 코드/속성 처리 | @Test(where:) 등으로 직관적 선언 |
| 오픈소스 | Apple 내장/폐쇄적 | GitHub 오픈소스, 커뮤니티 중심 |
마이그레이션도 점진적으로 가능하며 기존 XCTest와 공존 가능.
Swift Testing은 그냥 테스트 패키지가 아니라,
이제는 Swift Testing으로 내 프로젝트/라이브러리의 테스트 품질을 한 단계 올려보세요!
Swift Testing 핵심, 이해와 경험에서 시작하세요.