【发布时间】:2015-06-19 11:08:02
【问题描述】:
这方面已经有很多主题了,但我还没有找到适用于 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 元素类型
另外,我遇到了很多没有可靠答案的信息:
- 要在创建实体时强制转换,我一直在使用Jesse 的解决方案,但这不适用于更大范围的测试。
- solution has been posted on another question 涉及在运行时换出类,但这对我来说不适用于实体继承。
- 在这种情况下,是否有其他方法可以使用 Core Data 测试您的对象?你怎么做呢?
【问题讨论】:
-
您是否面临模拟问题?
标签: ios swift core-data nsmanagedobjectcontext