【发布时间】:2017-10-07 02:05:57
【问题描述】:
提前感谢您的帮助。
我在 Swift 3.1 中使用核心数据堆栈实现了一个缓存服务。暴露的接口符合这个协议:
protocol WeekForecastCacheService {
func add(cacheModels: [DayForecastCacheModel])
func get(cityId: Int, callback: @escaping ([DayForecastCacheModel]?) -> () )
}
理想情况下,我希望核心数据堆栈的内部保持私有。
不过,我也希望能够对课程进行单元测试。特别是暴露的接口。因为核心数据堆栈是持久的,所以我希望能够删除每个实体(如果您要在已知状态下开始测试,则重置)。如何在将单元测试实现保持在我的主要目标之外的同时执行此操作。
理想情况下,我还希望我的测试独立于实现...
我正在按照以下思路进行思考,但可以提出一些建议:
- 向缓存类添加删除所有功能
- 使用类扩展并在那里实现功能 - 这意味着大量的复制粘贴
- 将私有函数/变量更改为内部函数,提供足够的访问权限,以便在类扩展中轻松创建删除所有函数
- 不用担心,因为使用服务的类只使用协议,因此类中的函数和属性是否不是私有的并不重要
【问题讨论】:
标签: ios swift unit-testing core-data xctest