这是我的代码:
WDAlarm *alarm = [NSEntityDescription insertNewObjectForEntityForName:@"WDAlarm"
inManagedObjectContext:[[UTCoreData sharedManager] managedObjectContext]];
我正在使用断点检查insertedObjects并且:
po [[[UTCoreData sharedManager] managedObjectContext] insertedObjects];
结果是:
{(
)}
{(
)}
UTCoreData是一个辅助类(而不是在app delegate中添加所有核心数据代码)。创建对象警报。根据Apple的文档:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html#//apple_ref/occ/instm/NSManagedObjectContext/reset insertedObjects
返回已插入接收器但尚未保存在持久存储中的对象集。
这正是我的情况,但它继续返回空集(并且未发布通知NSManagedObjectContextObjectsDidChangeNotification
)。
更新1: sharedManager工作正常:
(lldb) po [[UTCoreData sharedManager] managedObjectContext] <NSManagedObjectContext: 0x920fff0>
(lldb) po [[UTCoreData sharedManager] managedObjectContext] <NSManagedObjectContext: 0x920fff0>
更新2:代码在生产代码中正常工作,而不是在XCTestCase中。我不知道它为什么会赢,尽管一切都是按预期创造的。
答案 0 :(得分:1)
当您的单元测试依赖单例并且您没有测试单例时,您正在运行经典的依赖项问题。
正如Dan Shelly已经提到的,单元测试核心数据可能很困难。如何测试核心数据有一些最佳实践。我多年来在项目中使用的那个是在每个setUp
方法中创建一个带有内存存储的新Core Data堆栈。重置/删除每个tearDown
方法中的核心数据堆栈,以确保每个单元测试方法都有一个清新的堆栈。