-
Ch7. Unit TestingRay Wenderlich/CoreData 2022. 10. 31. 00:41
Core Data stack for testing
좋은 유닛테스트는 FIRST를 따른다.
- Fast
- Isolated
- Repeatable
- Self-verifying
- Timely
이 샘플 프로젝트의 테스트 타겟은 서비스를 위한 앱 타겟과 다른 AppDelegate를 사용하도록 셋팅되어 있다.
코어 데이터는 디스크에 데이터를 Write한다. 하지만 이는 Isolated하지 않다. 또한 데이터가 영구적이기에 한 번 데이터를 Write하면 다른 테스트에 영향을 줄 수 있다. Repeatable하지 않다. 그렇다면 데이터를 Write하고 Delete해주면 어떨까? 이는 Fast하지 않다.
이를 해결하기 위해 in-memory SQLite store를 사용한다.
class TestCoreDataStack: CoreDataStack { override init() { super.init() let container = NSPersistentContainer(name: CoreDataStack.modelName, managedObjectModel: CoreDataStack.model) // Persistant container가 파일의 주소로 /dev/null을 사용하도록 했다. // 이렇게 하면 SQLite가 in-memory store를 생성한다. container.persistentStoreDescriptions[0].url = URL(fileURLWithPath: "/dev/null") container.loadPersistentStores { _, error in if let error = error as NSError? { fatalError("Unresolved error \\(error), \\(error.userInfo)") } } self.storeContainer = container } }
NSInMemoryStoreType를 사용하여 in-memory store를 구현할 수도 있다. 하지만 이를 사용하면 SQLite store와 in-memory store가 동작하는 방식이 달라진다. 하지만 테스트하면서 사용하는 Data가 많다면 이 타입을 사용해보자. 주의할 점은 사용할 Store의 URL을 테스트용으로 입력해주어야 한다.
'Ray Wenderlich > CoreData' 카테고리의 다른 글
Ch8. Measuring & Boosting Performance (0) 2022.10.31 Ch6. Versioning & Migration (0) 2022.10.27 Ch5. NSFetchedResultsController (0) 2022.10.27 Ch2. NSManagedObject Subclasses (0) 2022.10.27