带有 NSDictionaryResultType 的 NSFetchRequest 在单元测试时返回空结果

Posted

技术标签:

【中文标题】带有 NSDictionaryResultType 的 NSFetchRequest 在单元测试时返回空结果【英文标题】:NSFetchRequest with NSDictionaryResultType returns empty result when unit-testing 【发布时间】:2015-07-07 09:53:54 【问题描述】:

在对使用 Core Data 存储和加载对象的组件进行单元测试时,我遇到了以下问题:

正在获取属性设置 NSFetchRequestresultTypeNSDictionaryResultType。结果总是空的。尽管有可用的值,如相同组件的其他测试所示。同样,在正常的 App 执行期间,获取请求会返回足够的结果。

为了完整起见,我可能会评论说,对于单元测试,我使用像 [MagicalRecord setupCoreDataStackWithInMemoryStore]; 这样的 Magical Record 设置 Core Data(在 - (void)setUp 中)。然后我将被测组件的NSManagedObjectContext 设置为[NSManagedObjectContext MR_defaultContext] 返回的那个。创建测试数据后,我在上下文中调用 save。

有两种情况:

A) 创建测试数据后调用[componentUnderTest.managedObjectContext save:nil][NSManagedObjectContext MR_saveOnlySelfAndWait]。然后,当有问题的 fetch 请求被执行时,返回的数组是空的。

B) 创建测试数据后调用[componentUnderTest.managedObjectContext MR_saveToPersistentStoreAndWait]。当执行 fetch 请求 (executeFetchRequest:error:) 时会抛出以下异常:-[__NSTaggedDate count]: unrecognized selector sent to instance 0xe41b1dde2f600000

注意:我要加载的属性(只有一个)是NSDate 类型。我尝试在获取请求实例上通过propertiesToFetch: 设置NSStrings、NSExpressionDescriptionss 和NSPropertyDescriptions。结果总是一样的。

【问题讨论】:

【参考方案1】:

无论出于何种原因,使用[MagicalRecord setupCoreDataStackWithStoreNamed:@"Model"]; 初始化核心数据堆栈都可以正常工作。

【讨论】:

以上是关于带有 NSDictionaryResultType 的 NSFetchRequest 在单元测试时返回空结果的主要内容,如果未能解决你的问题,请参考以下文章

NSFetchedResultsController 可以与 NSDictionaryResultType 一起使用吗?

使用 NSDictionary 元素缓慢创建 NSMutableArray

核心数据:在获取时重命名属性

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

使用带有 uuencode 的“sendmail”发送邮件,并带有主题

带有和不带有聚合的 sql 查询