2015-12-02 32 views
0

我刚刚开始使用Core Data的基于OS X文档的应用程序。为了测试我的模型关系,我想创建一些NSManagedObject实体,将它们保存到一个文件中,并将它们读回到XCTestCase对象中。使用下面的代码,我可以在托管对象上下文中创建实体,但我无法弄清楚如何创建一个正常运行的持久性存储协调器和/或保存到文件。上述如何测试XCTestCase中的NSPersistentDocument?

class MyTests: XCTestCase { 

    var doc: Document! 
    var moc: NSManagedObjectContext! 
    //...// 

    override func setUp() { 
     super.setUp() 
     doc = Document() 
     moc = doc.managedObjectContext 
    } 

    //...// 
} 
+0

意识到写出来的问题是因为我在通过'configurePersistentStoreCoordinatorForURL'设置持久存储协调器之前获取'managedObjectContext', – JefferyRPrice

回答

0

问题,我最初的做法是,我是用configurePersistentStoreCoordinatorForURL之前获得managedObjectContext。一旦我解决了这个问题,解决方案非常简单。

class DocTests : XCTestCase { 

    let testFileURL = NSURL.fileURLWithPath("/Users/Me/Temp/DocTests", isDirectory: false) 

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

    func testWriteAndRead() { 

     writeSimpleTestDocument() 

     let doc = Document()   
     do { 
      try doc.readFromURL(testFileURL, ofType: "mydoctype") 
     } catch let error as NSError { 
      print("Failed to read, \(error), \(error.userInfo)") 
     } 

     let moc = doc.managedObjectContext! 

     // fetch from moc and verify test entities here ... 
     // ... 
    } 


    func writeSimpleTestDocument() { 

     // if test document exists, delete it 
     let fm = NSFileManager.defaultManager() 

     if fm.fileExistsAtPath(testFileURL.path!) { 
      do { 
       try fm.removeItemAtURL(testFileURL) 
      } catch let error as NSError { 
       print("Failed to remove, \(error), \(error.userInfo)") 
      } 
     } 

     let doc = Document() 

     do { 
      try doc.configurePersistentStoreCoordinatorForURL(testFileURL, ofType: "mydoctype", modelConfiguration: nil, storeOptions: nil) 
     } catch let error as NSError { 
      print("Failed to configure coordinator, \(error), \(error.userInfo)") 
     } 

     let moc = doc.managedObjectContext! 

     // create test entities in moc here ... 
     // ... 

     do { 
      try moc.save() 
     } catch let error as NSError { 
      print("Failed to save, \(error), \(error.userInfo)") 
     } 
    } 

} 
相关问题