NSFetchRequest with NSDictionaryResultType returns 单元测试时为空结果
NSFetchRequest with NSDictionaryResultType returns empty result when unit-testing
在对使用 Core Data 存储和加载对象的组件进行单元测试时,我遇到了以下问题:
正在获取属性设置 NSFetchRequest
的 resultType
到 NSDictionaryResultType
。结果总是空的。尽管有可用的值,如相同组件的其他测试所示。同样,在正常的应用程序执行期间,获取请求 return 足够的结果。
为了完整起见,我可能会评论说,对于单元测试,我使用 [MagicalRecord setupCoreDataStackWithInMemoryStore];
之类的 Magical Record 设置了核心数据(在 - (void)setUp
中)。然后我将被测组件的 NSManagedObjectContext
设置为由 [NSManagedObjectContext MR_defaultContext]
编辑的 return。创建测试数据后,我在上下文中调用保存。
有两种情况:
A) 创建测试数据后调用[componentUnderTest.managedObjectContext save:nil]
或[NSManagedObjectContext MR_saveOnlySelfAndWait]
。然后,当执行有问题的提取请求时,returned 数组为空。
B) 创建测试数据后调用[componentUnderTest.managedObjectContext MR_saveToPersistentStoreAndWait]
。执行提取请求时 (executeFetchRequest:error:
) 抛出以下异常:-[__NSTaggedDate count]: unrecognized selector sent to instance 0xe41b1dde2f600000
注意:我要加载的属性(只有一个)是NSDate
类型的。我已经尝试通过 propertiesToFetch:
在获取请求实例上设置 NSString
s、NSExpressionDescriptions
s 和 NSPropertyDescription
s。结果总是一样的。
无论出于何种原因,使用 [MagicalRecord setupCoreDataStackWithStoreNamed:@"Model"];
初始化核心数据堆栈都有效。
在对使用 Core Data 存储和加载对象的组件进行单元测试时,我遇到了以下问题:
正在获取属性设置 NSFetchRequest
的 resultType
到 NSDictionaryResultType
。结果总是空的。尽管有可用的值,如相同组件的其他测试所示。同样,在正常的应用程序执行期间,获取请求 return 足够的结果。
为了完整起见,我可能会评论说,对于单元测试,我使用 [MagicalRecord setupCoreDataStackWithInMemoryStore];
之类的 Magical Record 设置了核心数据(在 - (void)setUp
中)。然后我将被测组件的 NSManagedObjectContext
设置为由 [NSManagedObjectContext MR_defaultContext]
编辑的 return。创建测试数据后,我在上下文中调用保存。
有两种情况:
A) 创建测试数据后调用[componentUnderTest.managedObjectContext save:nil]
或[NSManagedObjectContext MR_saveOnlySelfAndWait]
。然后,当执行有问题的提取请求时,returned 数组为空。
B) 创建测试数据后调用[componentUnderTest.managedObjectContext MR_saveToPersistentStoreAndWait]
。执行提取请求时 (executeFetchRequest:error:
) 抛出以下异常:-[__NSTaggedDate count]: unrecognized selector sent to instance 0xe41b1dde2f600000
注意:我要加载的属性(只有一个)是NSDate
类型的。我已经尝试通过 propertiesToFetch:
在获取请求实例上设置 NSString
s、NSExpressionDescriptions
s 和 NSPropertyDescription
s。结果总是一样的。
无论出于何种原因,使用 [MagicalRecord setupCoreDataStackWithStoreNamed:@"Model"];
初始化核心数据堆栈都有效。