2

コアデータを使用するモデルファイルの単体テストを実行しています。テストターゲットは正常にビルドされますが、次のエラーが表示されます。

エラー:testThatDistinguishedFolderTypeForTheAccountExists(FolderDALTests)が失敗しました:+ entityForName:このモデルで「Folder」という名前のエンティティを見つけることができませんでした。

エラー:testThatFindByExchageAccountReturnsFolders(FolderDALTests)が失敗しました:+ entityForName:このモデルで「ExchangeAccount」という名前のエンティティを見つけることができませんでした。

ただし、この問題は、バンドルに含まれるすべてのモデルをマージしてNSManagedObjectModelが作成されない「setup」メソッドが原因であると感じています。

-(void)testThatDistinguishedFolderTypeForTheAccountExists
 {
   Folder *inbox = [NSEntityDescription insertNewObjectForEntityForName:@"Folder" 
   inManagedObjectContext:self.context];
   inbox.distinguishedFolderType = @"inbox";
   ExchangeAccount *account = [NSEntityDescription insertNewObjectForEntityForName:@"ExchangeAccount" inManagedObjectContext:self.context];
   id<FolderProtocol> folder = [FolderDAL findWithAccount:account DistinguishedFolderType:@"inbox" withManagedContext:self.context];

STAssertTrue([folder.folderDistinguishedFolderType isEqualToString:@"inbox"], @"Unable to find the folder with the given distinguished type");

}

そして他の方法は:

- (void)testThatFindByExchageAccountReturnsFolders
  {
      ExchangeAccount *account = [NSEntityDescription          insertNewObjectForEntityForName:@"ExchangeAccount" inManagedObjectContext:self.context];

     Folder *inbox = [NSEntityDescription insertNewObjectForEntityForName:@"Folder"     inManagedObjectContext:self.context];
     inbox.displayName = @"Inbox";
     inbox.exchangeAccount = account;

     Folder *calendars = [NSEntityDescription insertNewObjectForEntityForName:@"Folder" inManagedObjectContext:self.context];
     calendars.displayName = @"Calendars";
     calendars.exchangeAccount = account;

     NSArray *folders = [FolderDAL findByExchangeAccount:account withContext:self.context];

     STAssertTrue([folders count] > 0, @"No folders were returned");
  }

セットアップ方法は次のとおりです。

- (void)setUp
{
  [super setUp];

  NSManagedObjectModel *objectModel = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:[NSBundle mainBundle]]];
  NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel];
  STAssertTrue([storeCoordinator 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 = storeCoordinator;

}

ここで、「Folder」と「ExchangeAccount」はコアデータエンティティです。また、対応するDAL(データアクセス層)ファイルには、いくつかのビジネスロジックがあります。

4

1 に答える 1

0

ユニットテストをターゲットとしてスキーマに追加するのを忘れていました。

于 2012-10-12T06:05:20.677 に答える