私はカスタムエンティティ移行ポリシーを使って移行のためのマッピングモデルを構築しています。この移行のためにいくつかの単体テストを作成したいと思います。アプリケーションを実行すると、マイグレーションが正しく動作するように見えますが、ユニットテストでマイグレーションを実行すると、NSEntityMigrationPolicyサブクラスメソッドはまったく呼び出されません。コアデータの移行を単体テストする方法を教えてください。
私はXcodeの組み込みOCUnitフレームワークを使用しています。
私のテストコード:
- (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];
}
マイマッピングモデルは-createRelationshipsForDestinationInstance:entityMapping:manager:error:
メソッドを定義するカスタムNSEntityMigrationPolicyを指定しますが、私のポリシーは、ユニットテストから呼び出されることはありません。移行を実行すると、モデルが新しいバージョンに変更されます。期待される属性が適切な場所に表示されます。
マイグレーションポリシーをユニットテストで使用するにはどうすればよいですか?