使用NSDictionaryResultType的NSFetchRequest在单元测试时返回空结果

时间:2015-07-07 09:53:55

标签: ios objective-c unit-testing core-data magicalrecord

当单元测试使用Core Data存储和加载对象的组件时遇到以下问题:

获取属性设置NSFetchRequest' resultTypeNSDictionaryResultType。结果总是空的。虽然有相同组件的其他测试显示的值可用。同样,在正常的App执行期间,获取请求会返回足够的结果。

为了完整性,我可能会评论,对于单元测试,我使用像- (void)setUp这样的魔法记录设置核心数据(在[MagicalRecord setupCoreDataStackWithInMemoryStore];中)。然后,我将被测组件的NSManagedObjectContext设置为[NSManagedObjectContext MR_defaultContext]返回的组件。创建测试数据后,我调用save来保存上下文。

有两种情况:

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

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

注意:我要加载的属性(只有一个)属于NSDate类型。我已尝试在获取请求实例上通过NSString设置NSExpressionDescriptions s,NSPropertyDescriptionpropertiesToFetch: s。结果总是一样的。

1 个答案:

答案 0 :(得分:0)

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