我是Java開發人員,我用它來測試Java實體爲POJO。現在,使用Obj-C,我想爲從NSManagedObject繼承的實體(我使用CoreData進行持久化)執行相同的操作。NSManagedObject的單元測試[GHUnit]
比如我想測試我的客戶實體爲:
-(void)myTest {
Customer *customer = [Customer alloc] init];
customer.name = @"toto";
GHAssertEqualStrings(customer.name, @"toto", @"");
}
但我遇到的錯誤是:
NSInvalidArgumentException 原因: - [客戶的setName:]:無法識別的選擇發送到實例...
所以我一直在與有關數據庫架構的URL的setUp加載所有的NSManagedObjectContext。現在,我實例化我的客戶作爲和它的作品:
Customers *customer = [NSEntityDescription
insertNewObjectForEntityForName:kDataBaseCustomerKey inManagedObjectContext:ctx];
但它是測試一個「POJO」適當的方式?我想在沒有任何模型加載的情況下測試我的Customer類,因爲在這種情況下我不關心數據模型。
謝謝您的建議。
問候。
是的,我喜歡這個IN-MEMORY解決方案。謝謝它的工作(即使與GHUnit)。但這意味着我以前的解決方案使用了「生產」數據庫及其中的現有數據? – ragu89
爲你的**編輯**:這篇文章很有趣,有了這個解決方案,我將能夠測試我的MockCustomer而不依賴於核心數據堆棧。但是..我不是每個實體創建一個Mock類的粉絲。這不是一個沉重的解決方案嗎?你對那個怎麼想的? – ragu89
請參閱第二編輯。我依賴於我描述的模式 - 在測試中創建一個輕量級堆棧。在你之前的解決方案中,至少在GHUnit中,我不認爲你實際上在使用「生產」數據,這取決於你如何實例化NSManagedObjectContext,特別是因爲GHUnit不知道你的應用程序的持久存儲。 – FluffulousChimp