[swift] 코어 데이터 테스트

코어 데이터(Core Data)는 애플리케이션에서 데이터를 관리하고 영구적으로 저장하는 프레임워크입니다. 테스트는 앱의 데이터 작업을 검증하고 문제를 찾는 데 매우 중요합니다. 이번 포스트에서는 Swift를 사용하여 코어 데이터를 테스트하는 방법에 대해 알아보겠습니다.

1. 테스트 환경 설정

먼저, 테스트를 수행하기 전에 코어 데이터 스택을 초기화해야 합니다. 아래의 예제 코드를 사용하여 테스트 환경을 설정할 수 있습니다.

import XCTest
import CoreData

class CoreDataTests: XCTestCase {

    var managedObjectContext: NSManagedObjectContext!

    override func setUp() {
        super.setUp()

        let managedObjectModel = NSManagedObjectModel.mergedModel(from: nil)
        let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)

        do {
            try persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
        } catch {
            // 예외 처리 코드
        }

        managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
        managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator
    }

    override func tearDown() {
        super.tearDown()
    }
}

위의 코드에서는 setUp 메서드에서 코어 데이터 스택을 초기화하고, tearDown 메서드에서 정리 작업을 수행합니다.

2. 테스트 작성

이제 실제 테스트를 작성해보겠습니다. 아래 예제 코드는 코어 데이터를 사용하여 사용자를 생성하고 조회하는 테스트를 수행하는 것입니다.

func testCreateUser() {
    let user = User(context: managedObjectContext)
    user.name = "John Doe"
    user.age = 30

    // 저장할 때 에러가 발생하지 않는지 확인
    XCTAssertNoThrow(try managedObjectContext.save())

    // 저장된 사용자가 존재하는지 확인
    let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
    let users = try? managedObjectContext.fetch(fetchRequest)
    
    XCTAssertEqual(users?.count, 1)
}

func testFetchUserByName() {
    // 테스트 데이터 생성
    let user1 = User(context: managedObjectContext)
    user1.name = "John Doe"
    user1.age = 30

    let user2 = User(context: managedObjectContext)
    user2.name = "Jane Smith"
    user2.age = 25

    try? managedObjectContext.save()

    // 이름으로 사용자 조회
    let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "name == %@", "John Doe")

    let users = try? managedObjectContext.fetch(fetchRequest)

    XCTAssertEqual(users?.count, 1)
    XCTAssertEqual(users?.first?.name, "John Doe")
    XCTAssertEqual(users?.first?.age, 30)
}

위의 예제 코드에서는 testCreateUser 메서드에서 사용자를 생성하고 저장하는 과정을 테스트하고, testFetchUserByName 메서드에서 이름을 통해 사용자를 조회하는 과정을 테스트합니다.

3. 테스트 실행

마지막으로, 테스트를 실행해보겠습니다. Xcode에서 Cmd + U 키를 누르거나 테스트 파일 내부에서 우클릭하여 “Test”를 선택하여 테스트를 실행할 수 있습니다. 실행 결과는 테스트 네비게이터에서 확인할 수 있습니다.

결론

이번 포스트에서는 Swift를 사용하여 코어 데이터를 테스트하는 방법을 알아보았습니다. 코어 데이터를 효과적으로 테스트함으로써 앱의 데이터 작업을 검증하고 문제를 찾을 수 있습니다. 코어 데이터를 사용하는 앱을 개발하는 경우, 테스트 코드를 작성하여 안정적인 앱을 만들 수 있습니다.

참고자료