【发布时间】:2015-07-01 14:19:50
【问题描述】:
这是我的 XCTestCase 课程的开始:
var moc: NSManagedObjectContext!
override func setUp() {
super.setUp()
moc = self.setUpInMemoryManagedObjectContext()
self.fillManagedObjectContextWithExampleData(moc)
}
func setUpInMemoryManagedObjectContext() -> NSManagedObjectContext {
let modelName = "ProjectApp"
let modelURL = NSBundle.mainBundle().URLForResource(modelName, withExtension:"momd")!
let managedObjectModel = NSManagedObjectModel(contentsOfURL: modelURL)!
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)
persistentStoreCoordinator.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: nil, error: nil)
let managedObjectContext = NSManagedObjectContext()
managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator
return managedObjectContext
}
func fillManagedObjectContextWithExampleData(context: NSManagedObjectContext) {
// var firstSC = NSEntityDescription..insertNewObjectForEntityForName("StaticContent", inManagedObjectContext: context) as! StaticContent
var staticContentEntity = NSEntityDescription.entityForName("StaticContent", inManagedObjectContext: context)!
var firstSC = StaticContent(entity: staticContentEntity, insertIntoManagedObjectContext: context)
firstSC.name = "First Name"
var secondSC = StaticContent(entity: staticContentEntity, insertIntoManagedObjectContext: context)
secondSC.name = "Second Name"
var error: NSError? = nil
if context.save(&error) {
return
}
}
我只想创建 managedObjectContext(在内存中,仅用于测试)并用示例数据填充它。所以我可以使用:
managedObjectContext.executeFetchRequest(fetchRequest, error: nil) as! [StaticContent]
在我的单元测试中。它会执行,但是当我调用采用 [StaticContent] 的函数时,出现错误:
fatal error: NSArray element failed to match the Swift Array Element type
那么这有什么问题呢?我调用的函数运行良好。当我在我的应用程序中而不是在单元测试中使用它时,我没有问题。那么我做错了什么?
【问题讨论】:
-
你能把出错的代码贴出来吗?
-
顺便说一句,这可能与实体的 managedObjectClassName 在您的测试目标中不同:如果您在测试目标中包含您的管理对象子类,它的类名将是 YourTestTarget.StaticContent.. . 可以用这个解决方法解决:gist.github.com/efa85/d82cc8fb0358e970e1e4
-
谢谢,我在另一个 stackoverflow 问题中找到了类似的代码。我花了一个小时寻找解决方案,然后在我发布我的问题后我找到了它。
标签: ios swift unit-testing core-data nsmanagedobjectcontext