gpt4 book ai didi

ios - 用于单元测试的核心数据临时数据库

转载 作者:搜寻专家 更新时间:2023-11-01 06:40:07 25 4
gpt4 key购买 nike

这是否可以在我运行测试时创建新的临时核心数据数据库?

因为我有一个问题,当我运行我的测试时,我创建了愿望 list :

import XCTest
@testable import TestProj

class ChangeWishListTests: XCTestCase {
func testSaveWishList() {
self.wishList = self.changeWishListVC?.saveWishList(title: "Test wish list",
desc: "My description",
wishlistType: WishListType.Shared,
hidden: false)
XCTAssertNotNil(wishList, "Wishlist not created.")
}
}

比它出现在模拟器中。或者,如果不可能,我该如何管理我的假对象。

最佳答案

是的,你可以,但为了做到这一点,你必须能够更改(告诉 VC)用于执行核心数据操作的托管对象上下文。通过这样做,您可以在您的测试中使用 test 托管对象,并在生产应用程序代码中使用真正的托管对象。

通过测试托管对象上下文,我的意思是只将数据存储在内存中而不将任何内容保存到磁盘的对象 - 在这种上下文上执行的操作的结果不会在不同的启动之间持久化测试。

创建仅在内存中存储数据的托管对象上下文非常简单:

    let managedObjectModel = NSManagedObjectModel.init(contentsOfURL: modelURL)
var managedObjectContext = NSManagedObjectContext.init(concurrencyType: .MainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = NSPersistentStoreCoordinator.init(managedObjectModel: managedObjectModel)

var error: NSError?
let options = [NSMigratePersistentStoresAutomaticallyOption : true, NSInferMappingModelAutomaticallyOption : true];
let persistentStore = try! managedObjectContext.persistentStoreCoordinator?.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: options)

让自己有可能使用测试托管对象上下文的最简单方法是使用依赖注入(inject)。创建将托管对象上下文作为参数的 VC 初始化程序 - 在测试代码中注入(inject)测试托管对象上下文,在生产代码中注入(inject)正常托管对象上下文。

关于ios - 用于单元测试的核心数据临时数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36648037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com