已经有很多关于这个主题的内容了,但我还没有找到适用于Swift(Xcode 6.2)的解决方案。
为了测试Swift中支持Core Data的类,我生成新的托管对象上下文,然后将其注入到我的类中。
//Given
let testManagedObjectContext = CoreDataTestComposer.setUpInMemoryManagedObjectContext()
let testItems = createFixtureData(testManagedObjectContext) as [TestItem]
self.itemDateCoordinator.managedObjectContext = testManagedObjectContext
//When
let data = self.itemDateCoordinator.do()
//Then
XCTAssert(data.exists)
问题出在将在测试中创建的MOC传递给执行操作的类。由于实体类有命名空间,Core Data无法获取适当的ManagedObject子类并返回一个NSManagedObject集合。当循环或对这些对象进行任何操作时(在您的类中将是测试项数组[TestItem]),会出现问题。
例如,有问题的类ItemDateCoordinator将执行此循环(从NSFetchRequest中拉取相关数据后):
for testItem in testItems {
testItem.doPart(numberOfDays: 10)
}
会导致以下错误:
致命错误:NSArray元素未能匹配Swift Array Element类型
此外,我遇到了一些信息收集,但没有一个确定的答案: