Skip to content

Instantly share code, notes, and snippets.

@succi0303
Last active November 28, 2023 22:24
Show Gist options
  • Save succi0303/12aa5da7a21044ad4ba3 to your computer and use it in GitHub Desktop.
Save succi0303/12aa5da7a21044ad4ba3 to your computer and use it in GitHub Desktop.
SwiftでCoreDataのユニットテストを書くときの注意事項
import XCTest
import CoreData
class CoreDataTest: XCTestCase {
var managedObjectContext: NSManagedObjectContext?
override func setUp() {
super.setUp()
// 1. Create Managed Object Context
let managedObjectModel = NSManagedObjectModel.mergedModelFromBundles([NSBundle.mainBundle()])
let storeCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel!) as NSPersistentStoreCoordinator
do {
try storeCoordinator.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: nil)
} catch let error as NSError {
print("\(error) \(error.userInfo)")
abort()
}
self.managedObjectContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
managedObjectContext!.persistentStoreCoordinator = storeCoordinator
}
func testModelExists() {
// 2. Create Managed Object
let entity = NSEntityDescription.entityForName("Model", inManagedObjectContext: managedObjectContext!)
let model = Model(entity: entity!, insertIntoManagedObjectContext: managedObjectContext!)
XCTAssertNotNil(model)
}
}
@succi0303
Copy link
Author

SwiftでCoreDataのユニットテストを書くときの注意事項

1. Managed Object Contextの作成

CoreDataの操作をするためにManaged Object Contextの作成が必要である。テストの実施ごとにメモリ上にデータを保持するように、PersistentStoreにNSInMemoryStoreTypeを指定する。

参考情報

Managed Objectの生成

Managed Objectを生成する際に、単純に以下のコードを書くとエラーが発生する。

let model = NSEntityDescription.insertNewObjectForEntityForName("Model", inManagedObjectContext: managedObjectContext!) as! Model

原因は、Swiftでnamespaceが導入されたことであるらしい。
エラーを防ぐために、まずNSEntityDescription.entityForNameでエンティティを取得し、モデルクラスのイニシャライザを使ってManaged Objectを生成する。

参考情報

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment