【问题标题】:how to test core data model used in a framework in swift如何快速测试框架中使用的核心数据模型
【发布时间】:2019-10-03 07:12:22
【问题描述】:

我正在编写一个 swift 框架,并使用来自“pod lib create”命令的模板。在我的开发 pod 中,我创建了一个核心数据模型文件,并在我的框架中使用核心数据。现在我想为它编写单元测试。这是我的单元测试类代码:

import XCTest
import CoreData
@testable import MyFramework

class MyClassTests: XCTestCase {

    var testPersistentContainer: NSPersistentContainer?

    override func setUp() {
        let persistentStoreDescription = NSPersistentStoreDescription()
        persistentStoreDescription.type = NSInMemoryStoreType

        let container = NSPersistentContainer(name: "MyCoreDataModelFileName")
        container.persistentStoreDescriptions = [persistentStoreDescription]
        container.loadPersistentStores { (storeDescription, error) in
            if let error = error {
                fatalError(error.localizedDescription)
            }
        }

        self.testPersistentContainer = container
    }

    override func tearDown() {

    }

    func testSomething() {
        // the persistent container I'm trying to use is nil
        XCTAssertNotNil(self.testPersistentContainer)
    }
}

我知道问题出在哪里,问题是测试目标找不到我的核心数据模型文件,当我在示例应用目标中创建一个具有正确名称的文件时,上述测试通过。但是

问题

测试框架核心数据模型的正确方法是什么?

【问题讨论】:

  • 当你想测试你的模型时你想做什么?如果您的计划是创建一个模型、保存它并测试它是否正确持久化,那么您实际上是在测试 CoreData 框架本身,这可能是个坏主意,Apple 已经为您处理好了。
  • 我不想测试核心数据功能,我想测试我的功能,例如,如果我使用 myClass.add(something),我想测试它是否在核心中保存了一些东西或者不是。等等……
  • 好吧,我有一段时间没有使用 CoreData,但是您检查过您的模型文件是否已链接到您的测试目标(Xcode 中的右侧面板)?
  • 不是,我的主要问题是我不知道如何在可可豆库模板中链接它,因为当我点击模型文件时,Xcode 不显示主应用程序或测试目标,而是显示框架和 pod 目标。

标签: ios swift unit-testing core-data


【解决方案1】:

您是否尝试过从框架包中加载 Core Data 模型?

let managedObjectModel = NSManagedObjectModel.mergedModel(from: nil)

那么您就不需要将它添加到您的测试目标中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多