SORU
4 Aralık 2009, Cuma


Nasıl birim Temel Veri kullanıyorum şimdi benim modelleri test etmek için?

Bir iphone uygulaması, bir etki alanı modeli kullanarak geliştiriyorum, şimdiye kadar uygulamanın kalıcılık yönü ertelendi. Çekirdek Veri zaten iyi tanımlanmış bir model var ama mevcut birim testleri ile bir sorun haline çalıştırıyorum bu yana gerçekten iyi bir çözüm gibi görünüyor.

İşte ben şimdi ne var basit bir örnek:

- (void)test_full_name_returns_correct_string {
    Patient *patient = [[Patient alloc] init];  
    patient.firstName = @"charlie";
    patient.lastName = @"chaplin";
    STAssertTrue([[patient fullName] isEqualToString:@"charlie chaplin"], @"should have matched full name");
}

Hastamı nasıl NSManagedObject uzanan nesne ve @ad ve soyad özelliklerini kullanan dinamik bir zamanlar bu işi yapabilir miyim?

Başkasının Çekirdek Veri ile bu tür bir çalışma var? Teşekkürler.

CEVAP
4 Aralık 2009, Cuma


Çekirdek bir Veri yığını, ya da -setUp Her yöntem veya inşa etmek ve onu yıkmak gerekir. NSInMemoryPersistentStore kullanarak bir şeyler hızlı ve bellek birim testleri için devam edecektir. @property (nonatomic,retain) NSManagedObjectContext *moc test çalışmasına bir alt ekleyin. Sonra:

- (void)setUp {
  NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:bundleContainingXCDataModel]];
  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.moc = [[NSManagedObjectContext alloc] init];
  self.moc.persistentStoreCoordinator = psc;

  [mom release];
  [psc release];

}

- (void)tearDown {
  self.moc = nil;
}

Test yöntemi gibi görünüyor:

- (void)test_full_name_returns_correct_string {
    Patient *patient = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.moc];

    patient.firstName = @"charlie";
    patient.lastName = @"chaplin";
    STAssertTrue([[patient fullName] isEqualToString:@"charlie chaplin"], @"should have matched full name");
}

senin varlığın varsayarak Person olarak adlandırılır. Bir bellek sızıntısı sürümü yöntemi, bu arada; sabırlı olmalı -release'd non-Çekirdek Veri sürümü (insertNewObjectForEntityForName:managedObjectContext: döndürür bir autoreleased örneği).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • National Geographic

    National Geo

    7 Mayıs 2006
  • SelmerSaxMan

    SelmerSaxMan

    24 HAZİRAN 2006
  • steven johns

    steven johns

    11 Mart 2011