ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ch7. Unit Testing
    Ray 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
Designed by Tistory.