XCTest 프레임워크를 활용하는 방안을 구체적으로 설명하겠습니다. XCTest는 Apple의 표준 테스트 프레임워크로, 단위 테스트 및 성능 테스트를 작성하고 실행할 수 있게 해줍니다. 이 프레임워크는 Xcode와 통합되어 있어 iOS, macOS, watchOS, tvOS 애플리케이션을 개발할 때 사용됩니다.
1. XCTest 설정 및 기본 사용법
1-1. 테스트 타겟 추가
프로젝트에 테스트 타겟을 추가하려면 다음 단계를 따릅니다:
- Xcode에서 프로젝트 선택: 프로젝트 탐색기에서 프로젝트를 선택합니다.
- 테스트 타겟 추가:
- 상단 메뉴에서 File > New > Target을 선택합니다.
- 플랫폼을 선택하고 Unit Testing Bundle을 선택한 후 Next를 클릭합니다.
- 테스트 타겟의 이름을 입력하고 Finish를 클릭합니다.
1-2. 테스트 파일 생성
테스트 파일을 생성하려면 다음 단계를 따릅니다:
- 테스트 폴더 선택: 프로젝트 탐색기에서 생성된 테스트 타겟의 폴더를 선택합니다.
- 새 파일 생성: 상단 메뉴에서 File > New > File을 선택합니다.
- Swift 파일 선택: Swift File을 선택한 후 Next를 클릭합니다.
- 파일 이름 입력: 파일 이름을 입력하고 Create를 클릭합니다.
1-3. XCTestCase 서브클래스 작성
테스트 파일에서 XCTestCase를 상속받아 테스트 클래스를 작성합니다. 예를 들어, MyAppTests.swift 파일에 다음과 같이 작성할 수 있습니다:
import XCTest
@testable import MyApp
class MyAppTests: XCTestCase {
override func setUpWithError() throws {
// 각 테스트 메서드 호출 전에 실행됩니다.
}
override func tearDownWithError() throws {
// 각 테스트 메서드 호출 후에 실행됩니다.
}
func testExample() throws {
// 테스트 코드 작성
XCTAssertEqual(1 + 1, 2)
}
}
2. 구체적인 테스트 작성 방법
2-1. 단위 테스트(Unit Test)
단위 테스트는 개별 함수나 메서드가 예상대로 작동하는지 확인합니다. 예를 들어, PointManager 클래스의 calculatePoint 메서드를 테스트하는 코드를 작성할 수 있습니다:
class PointManager {
func calculatePoint(for products: [Product]) -> Double {
let points = Double(products.count) * 0.05
return min(points, 0.2)
}
}
class PointManagerTests: XCTestCase {
func testCalculatePoint() throws {
let productA = Product(name: "Book", price: 3000)
let productB = Product(name: "Pencil", price: 1000)
let sut = PointManager()
let points = sut.calculatePoint(for: [productA, productB])
XCTAssertEqual(points, 0.1)
}
}
2-2. 성능 테스트(Performance Test)
성능 테스트는 특정 코드 블록이 주어진 시간 내에 실행되는지 확인합니다. measure 메서드를 사용하여 성능 테스트를 작성할 수 있습니다:
class PerformanceTests: XCTestCase {
func testPerformanceExample() throws {
self.measure {
// 성능을 측정할 코드 블록
_ = (0..<1000).map { $0 * $0 }
}
}
}
2-3. 비동기 코드 테스트
비동기 코드를 테스트하려면 expectation을 사용하여 비동기 작업이 완료될 때까지 기다릴 수 있습니다:
class AsyncTests: XCTestCase {
func testAsyncExample() throws {
let expectation = self.expectation(description: "Async Task")
someAsyncFunction {
// 비동기 작업 완료
expectation.fulfill()
}
waitForExpectations(timeout: 5, handler: nil)
}
}
3. XCTest 활용 팁
- 테스트의 이름 짓기: 테스트 메서드의 이름은 해당 테스트가 무엇을 검증하는지 명확히 나타내야 합니다. 예를 들어, testCalculatePoint 대신 testCalculatePointForTwoProducts와 같이 더 구체적으로 작성합니다.
- 테스트의 독립성 유지: 각 테스트는 독립적으로 실행되어야 합니다. 테스트 간의 상호 의존성을 피하고, setUp 및 tearDown 메서드를 사용하여 초기화 및 정리 작업을 수행합니다.
- 자주 실행: 코드를 변경할 때마다 테스트를 자주 실행하여 변경 사항이 기존 기능에 영향을 미치지 않도록 합니다.
- 커버리지 확인: Xcode에서 테스트 커버리지를 확인하여 코드의 어느 부분이 테스트되지 않았는지 파악할 수 있습니다.
4. XCTest 결과 확인 및 디버깅
테스트를 실행한 후, Xcode는 테스트 결과를 보여줍니다. 실패한 테스트는 빨간색으로 표시되며, 성공한 테스트는 녹색으로 표시됩니다. 실패한 테스트를 클릭하면 실패한 위치로 이동하여 디버깅할 수 있습니다.
XCTest를 활용하면 코드의 신뢰성을 높이고, 유지보수를 용이하게 할 수 있습니다. 다양한 테스트 기법을 활용하여 모든 중요한 시나리오를 검증하는 것이 중요합니다.
🍎 참고. 애플 공식 문서
XCTest | Apple Developer Documentation
Create and run unit tests, performance tests, and UI tests for your Xcode project.
developer.apple.com
'iOS' 카테고리의 다른 글
[iOS] CoreData 개념 및 활용예제 (2) | 2025.01.09 |
---|---|
[iOS/swift] 객체 지향 패러다임 구현하기🍀 (0) | 2024.07.22 |
[로그인] KeyChain으로 토큰 저장하기 (UserDefault와의 차이점) (0) | 2024.04.07 |
[iOS] UIKit로 알아보는 MVVM와 MVP 아키텍처 (차이점, 비슷한 점, 예시) (0) | 2024.03.06 |
iOS 앱의 원리, 웹과 비교해서 알아보자 (0) | 2024.01.17 |