2011-04-13 12 views
9

कोरडाटा टेम्पलेट के रूप में शुरू करने के बाद, मैंने एक आईफोन ऐप बनाया है जो डेटा मॉडल में हेरफेर करने के लिए कोरडाटा का उपयोग करता है। अब तक काम करता है ...CoreData के साथ यूनिटटेस्ट कैसे करें?

अब मैंने फैसला किया है कि मुझे कुछ "इकाई" परीक्षणों की जांच करने की आवश्यकता है ताकि यह जांच सके कि कोर डेटा मॉडल सही तरीके से छेड़छाड़ की गई है (अब तक मैंने केवल मैन्युअल जांच की है और सीधे CoreDataEditor के साथ डेटाबेस की जांच की है)। मैं कैसे Xcode में UnitTests स्थापित करने के लिए पर

http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html

पालन किया है। यह तर्क और एप्लिकेशन टेस्ट दोनों के लिए अब तक काम करता है। हालांकि, मुझे कोरडाटा बैकएंड के साथ काम करने वाले "यूनिट" परीक्षण नहीं मिल सकते हैं (मुझे मेरा डेटा मॉडल नहीं मिला है और मुझे नहीं पता कि इसमें क्या शामिल होना चाहिए या लिंक आदि ...)

क्या कोई सूचक/विवरण है कोर डेटा आईफोन ऐप के "यूनिट" परीक्षण को कैसे करें?

पीएस: मुझे पता है कि डेटाबेस बैक एंड के साथ परीक्षण सख्ती से "यूनिट" परीक्षण नहीं कर रहा है। मुझे परवाह नहीं है कि परीक्षण वास्तविक एप्लिकेशन (एप्लिकेशनटेस्टिंग) के साथ सिम्युलेटर पर है या यदि यह यूनिट परीक्षण (लॉजिकटेस्ट) के लिए विशेष रूप से कोर डेटा बैकएंड है, तो मैं सेटअप के दौरान कुछ परीक्षण ऑब्जेक्ट्स भर दूंगा।

संपादित करें: मैं How to unit test my models now that I am using Core Data? और http://chanson.livejournal.com/115621.html पाया है लेकिन अब मैं iPhone UnitTesting UITextField value and otest error 133 में वर्णित समस्या में पड़ गए ... ठीक है, सिवाय मैं त्रुटि कोड 134 है: -? (((कोई भी विचार

उत्तर

11

। ठीक मैं यह काम कर रहा गया ...

  1. को यहां बताए गए LogicTests बनाएँ (अनुभाग की स्थापना तर्क परीक्षण): http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html

  2. तर्कसंगत टेस्ट के लिए नए बनाए गए लक्ष्य में CoreData.framework मैन्युअल रूप से जोड़ें: इसे एप्लिकेशन लक्ष्य से तर्क परीक्षण लक्ष्य (फ़ोल्डर "पुस्तकालयों के साथ लिंक बाइनरी) में खींचें।

  3. अपने * .xcdatamodeld पर राइट-क्लिक करें और जानकारी प्राप्त करें -> लक्ष्य चुनें। लॉजिक टेस्ट लक्ष्य का चयन करें (कुछ अजीब कारणों से वास्तविक आवेदन लक्ष्य मेरे मामले में नहीं चुना गया था ... लेकिन यह काम करता है)

  4. आपकी यूनिट टेस्ट क्लास में (आपने चरण 1: LogicTests.m में बनाया है) जोड़ें निम्न विधि:

    - (void) setUp { 
    
        NSArray *bundles = [NSArray arrayWithObject:[NSBundle bundleForClass:[self class]]]; 
        NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:bundles]; 
        STAssertNotNil(mom, @"ManangedObjectModel ist nil"); 
    
        NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; 
        STAssertTrue([psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:NULL] ? YES : NO, @"Should be able to add in-memory store");  
    
        self.context = [[NSManagedObjectContext alloc] init]; 
        self.context.persistentStoreCoordinator = psc; 
    
        [mom release]; 
        [psc release]; 
    } 
    

अब आप कोर डाटा के साथ एक तर्क टेस्ट समर्थन की स्थापना की है। तर्क परीक्षण LogicTests लक्ष्य बनाकर अलगाव (सिम्युलेटर के बिना) में किया जाता है। इसके लिए एक अस्थायी इन-मेमोरी डेटाबेस बनाया गया है।

- (void) testStuff {  
    NSManagedObject *managedObj = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:self.context]; 

    [managedObj setValue:[NSNumber numberWithInt:90000] forKey:@"id"]; 

    NSError *error = nil; 
    if (![self.context save:&error]) { 
     STFail(@"Fehler beim Speichern: %@, %@", error, [error userInfo]); 
    } 
} 

आशा इस मदद करता है .... मज़े: अपने परीक्षण तरीकों में आप अब की तरह कुछ कर सकते हैं!

+1

एक शर्म की बात है कि लिंक कहीं और नहीं जाता है। – Houman

+0

मुझे यह लिंक नमूना कोड के लिए मिला है जो उस लिंक का साथी है जो अब काम नहीं करता है: https://developer.apple.com/library/ios/samplecode/UnitTests/Introduction/Intro.html – idStar

संबंधित मुद्दे