如何快速测试框架中使用的核心数据模型

Posted

技术标签:

【中文标题】如何快速测试框架中使用的核心数据模型【英文标题】: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 目标。 【参考方案1】:

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

let managedObjectModel = NSManagedObjectModel.mergedModel(from: nil)

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

【讨论】:

以上是关于如何快速测试框架中使用的核心数据模型的主要内容,如果未能解决你的问题,请参考以下文章

使用实体框架核心模型时 WPF 数据网格未更新

核心数据模型 Url 在框架中为 Nil

如何选择开源的机器学习框架?

核心数据测试迁移映射模型

在实体框架模型类中实现加密

图表数据的核心数据模型设计