Sto costruendo un modello di mappatura per la mia migrazione con una politica di migrazione dell'entità personalizzata e mi piacerebbe davvero creare alcuni test unitari per questa migrazione. La migrazione sembra funzionare correttamente quando eseguo l'app, ma i miei metodi di sottoclasse NSEntityMigrationPolicy non vengono richiamati affatto quando eseguo la migrazione tramite un test di unità.Come posso testare una migrazione dei dati di base?
Sto usando il framework OCUnit incorporato di Xcode.
mio codice di prova:
- (void)test1to2Migration_appIdentifierMoved {
[self createVersion1Store];
// TODO Perform migration
NSManagedObjectModel *version1Model = [self version1Model];
NSManagedObjectModel *version2Model = [self version2Model];
NSError *error = nil;
NSMappingModel *mappingModel = [NSMappingModel
inferredMappingModelForSourceModel:version1Model
destinationModel:version2Model error:&error];
STAssertNotNil(mappingModel, @"Error finding mapping model: %@", error);
NSMigrationManager *migrationManager =
[[[NSMigrationManager alloc]
initWithSourceModel:version1Model
destinationModel:version2Model]
autorelease];
BOOL migrationSucceeded =
[migrationManager migrateStoreFromURL:self.version1StoreURL
type:NSSQLiteStoreType
options:nil
withMappingModel:mappingModel
toDestinationURL:self.version2StoreURL
destinationType:NSSQLiteStoreType
destinationOptions:nil
error:&error];
STAssertTrue(migrationSucceeded, @"Error migrating store: %@", error);
// TODO Verify appIdentifier is moved from Project to its Tests
[self deleteTempStores];
}
Il mio modello di mappatura specifica un NSEntityMigrationPolicy personalizzato che definisce il metodo -createRelationshipsForDestinationInstance:entityMapping:manager:error:
, ma la mia politica non viene mai chiamato dal test di unità. Quando eseguo la migrazione, il modello viene modificato nella nuova versione: gli attributi previsti vengono visualizzati nei punti giusti.
Qualche idea su come posso far funzionare la mia politica di migrazione in un test unitario?