NSFetchedResultsController不想被模拟

更具体地说,NSFetchedResultsController的Objective-C泛型不能很好地与Swift协议的relatedtype配合使用。

“测试工程”背后的思想是,不是针对具体类的接口编写代码,而是针对具有相同接口且具体类遵循的协议编写代码。 对于“真实”构建,使用真实对象。 为了进行测试,可以替换模拟对象或伪造对象,从而进行可靠的测试。

对于基于Core-Data的应用程序,这意味着创建一个我们要针对其进行编码的“ NSFetchedResultsControllerPrototol”。 NSFetchedResultsController实际上有一个使用的泛型类-它的原始定义为NSFetchedResultsController : NSObject where ResultType: NSFetchedRequestResult 。 这对我们来说是完美的,因为这样我们可以使用关联的类型,然后用模拟代替所出售的对象。

在写出该方法时,不会产生任何内联错误,并且在进行规划和开发的前提下,这是可行的。 但是,到了构建的时候,结果却截然不同:

编译期间的分段错误意味着编译器本身已崩溃。 不幸的是,使用泛型时经常发生这种情况,短期内别无选择,只能解决。

(但是在此之前,警告是一团糟,错误看上去像表情符号,说明它们如何使您感觉:’_’,等)。

iOS的核心功能仍然是本机Objective-C,即使以Swift表示,也要等到验证尽可能接近您的特定用例后,才能假设它会起作用。 仍然可以模拟核心数据,包括健壮的模拟; 随后的文章将对其进行探讨。

编辑:现在归档为 Open Radar 35110402