1
使用的OCUnit對象是否有簡單出路在那裏創建用於測試的原因NSManagedObjects不以用於發佈應用程序創建的託管對象上下文?單元測試的XCode 4.5的iOS開發
我現在進入核心數據編碼幾個星期,但仍然有一些問題的細節...爲什麼我不能只分配和初始化對象進行測試?我真的必須處理第二個持久性存儲/管理對象上下文(以及哪一個)?
我一定要考寫在我的NSManagedObject子類的一些方法...
使用的OCUnit對象是否有簡單出路在那裏創建用於測試的原因NSManagedObjects不以用於發佈應用程序創建的託管對象上下文?單元測試的XCode 4.5的iOS開發
我現在進入核心數據編碼幾個星期,但仍然有一些問題的細節...爲什麼我不能只分配和初始化對象進行測試?我真的必須處理第二個持久性存儲/管理對象上下文(以及哪一個)?
我一定要考寫在我的NSManagedObject子類的一些方法...
相信我,你不想來測試核心數據對象,而無需使用MOC。充其量,你必須做不完善的事情。
但是,如果您不想使用您的實際數據庫,請使用內存存儲。設置起來非常簡單。事實上,這正是我用於很多自己的單元測試的原因。
雖然我提醒你。有很多事情與SQL存儲和內存存儲行爲不一樣。謂詞是最常見的問題。閱讀文檔以確保您的謂詞正確。
我會說在測試過程中,你可以使用內存中的MOC,但是你應該有一個運行你對實際數據庫本身進行測試的配置,以確保它可以工作。爲了提高速度,也許您使用內存數據庫進行正常使用,並使用實際的數據庫進行計劃的持續集成測試。
舉個例子,你可以做這樣的事情來創建你的內存MOC ...
- (NSManagedObjectContext*)managedObjectContextWithConcurrencyType:(NSManagedObjectContextConcurrencyType)concurrencyType {
NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil];
STAssertNotNil(mom, @"Can not create MOM from main bundle");
NSPersistentStoreCoordinator *psc = [[MyPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
STAssertNotNil(psc, @"Can not create persistent store coordinator");
NSPersistentStore *store = [psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:0];
STAssertNotNil(store, @"Can not create In-Memory persistent store");
MyManagedObjectContext *moc = [[MyManagedObjectContext alloc] initWithConcurrencyType:concurrencyType];
moc.persistentStoreCoordinator = psc;
return moc;
}
謝謝,我會努力的!但我有一個問題:你會在哪裏放置示例代碼?在每一個測試課上?這樣做的最佳做法是什麼? – CGee
還有一個問題:爲什麼在那裏繼承NSPersistantStoreCoordinator和NSManagedObjectContext?我可以做到沒有子類化? – CGee
還有一個問題:即使在將「#import」放入我的.h文件後,我得到的是所有核心數據類的Apple Mach-O鏈接程序錯誤... –
CGee