Почему Core Data загружает два постоянных хранилища? - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь выполнить несколько простых Core Data модульных тестов.
Но из того, что я вижу, создано два постоянных хранилища (оба типа sql), поэтому мои setup(), tearDown() методы модульного тестирования вызываются дважды, сбрасываяNSManagedObjectContext, что вызывает некоторые проблемы.

Вот мой код для загрузки магазинов:

func createContainer(storeType: StoreType, completion: @escaping (NSPersistentContainer) -> ()) {
    let container = NSPersistentContainer(name: "Gym")

    container.loadPersistentStores { description, error in
        guard error == nil else {
            fatalError("Failed to load store \(error!)")
        }

        description.type = storeType.type

        completion(container)
    }
}

А это мой код модульного теста:

import XCTest
import CoreData
@testable import Gym

class GymTests: XCTestCase {

    var context: NSManagedObjectContext!

    override func setUp() {
        super.setUp()

        createContainer(storeType: .inMemory) { container in
            self.context = container.viewContext
        }
    }

    func testAddingExercise() {
        // Given
        context.performChanges {
            _ = Exercise.insert(into: self.context, name: "Bench Press", groups: Set(["Chest", "Triceps", "Shoulders"]))
            _ = Exercise.insert(into: self.context, name: "Squats", groups: Set(["Legs"]))
            _ = Exercise.insert(into: self.context, name: "Deadlifts", groups: Set(["Back", "Legs", "Arms"]))
        }

        // When
        let exercises = Exercise.fetch(in: context)

        // Then
        XCTAssertEqual(exercises.count, 3)
    }

    override func tearDown() {
        context = nil
        super.tearDown()
    }
}

Во второй раз, когда он запускает мой тест, контекст был сброшен в tearDown(), поэтому при добавлении упражнений контекст будет нулевым.

Не уверен, как именно это происходит.Почему создается два магазина?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...