Тестирование основных данных - PullRequest
0 голосов
/ 14 июня 2019

Я хочу настроить макет для моего менеджера данных Core.

Я делаю это по-старому для основного стека данных, но хочу сделать это для упражнения.

В основном Core Data Manager я настроил с помощью

var objectContext: NSManagedObjectContext! = nil
    var entity: NSEntityDescription! = nil
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    objectContext = appDelegate.persistentContainer.viewContext
    entity = NSEntityDescription.entity(forEntityName: Constants.entityName, in: objectContext)!

Теперь, очевидно, я не могу использовать постоянный контейнер UIApplication в моем макете.

Поэтому я попытался использовать следующее:

objectContext =  NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
let entityOne = NSEntityDescription.insertNewObject(forEntityName: Constants.entityName, into: objectContext)

Однако я получаю сообщение об ошибке «NSInvalidArgumentException», «+ entityForName: nil не является допустимым NSPersistentStoreCoordinator для поиска имени объекта« TaskEntity »»

Так, как я могу установить новый objectContext для моего макета?

1 Ответ

1 голос
/ 14 июня 2019

Одним из решений является создание полного стека базовых данных, но постоянное хранилище должно храниться только в памяти.Таким образом, вам не нужно иметь дело с зависимостью делегата приложения.Установите для контекста значение nil и затем удалите хранилище из координатора в tearDown()

class TestExample: XCTestCase {
    var storeCordinator: NSPersistentStoreCoordinator!
    var managedObjectContext: NSManagedObjectContext!
    var managedObjectModel: NSManagedObjectModel!
    var store: NSPersistentStore!

    override func setUp() {
        super.setUp()

        managedObjectModel = NSManagedObjectModel.mergedModel(from: nil)
        storeCordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)

        do {
            store = try storeCordinator.addPersistentStore(
                ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
        } catch {
            XCTFail("Failed to create a persistent store, \(error)")
        }
        managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
        managedObjectContext.persistentStoreCoordinator = storeCordinator
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...