我在Swift 3.1中使用核心数据堆栈实现了一个缓存服务。暴露的接口符合此协议:
protocol WeekForecastCacheService {
func add(cacheModels: [DayForecastCacheModel])
func get(cityId: Int, callback: @escaping ([DayForecastCacheModel]?) -> () )
}
理想情况下,我希望核心数据堆栈的内部保持私密性。
但是我也希望能够对课程进行单元测试。特别是暴露的界面。因为核心数据堆栈是持久的,所以我希望能够删除每个实体(如果要在已知状态下启动测试,则重置)。如何在将单元测试实现保持在主要目标之外的情况下继续这样做。
理想情况下,我还希望我的测试独立于实施......
我正在考虑以下几点,但可以提出一些建议:
答案 0 :(得分:0)
在单元测试Core Data时,一种典型的方法是使用内存存储类型来有效地删除" persistent"核心数据的一部分。使用内存存储,您可以获得Core Data的所有常用功能,但持久性存储不会写入文件,因此它始终为空。这会让你进入一个已知的起始状态。如有必要,您可以在开始测试之前将其他已知状态预加载到内存存储中。
关键是NSInMemoryStoreType
。如果您正在设置显式添加持久性存储,那么在调用type
时,这将是addPersistentStore(ofType:configurationName:at:options:)
值。如果您使用的是NSPersistentContainer
,则可以在persistentStoreDescriptions
属性中包含商店类型。