Estoy construyendo un modelo de mapeo para mi migración con una política de migración de entidad personalizada, y realmente me gustaría construir algunas pruebas de unidad para esta migración. La migración parece funcionar correctamente cuando ejecuto la aplicación, pero mis métodos de subclase NSEntityMigrationPolicy no se invocan cuando ejecuto la migración mediante una prueba unitaria.¿Cómo puedo probar la unidad de una migración de datos centrales?
Estoy usando el marco OCUnit integrado de Xcode.
Mi código de prueba:
- (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];
}
Mi modelo de asignación especifica un NSEntityMigrationPolicy personalizada que define el método -createRelationshipsForDestinationInstance:entityMapping:manager:error:
, pero mi política nunca es llamado desde la unidad de prueba. Cuando ejecuto la migración, el modelo se modifica a la nueva versión: los atributos esperados aparecen en los lugares correctos.
¿Alguna idea de cómo puedo hacer que mi política de migración funcione en una prueba unitaria?