“无法在写事务之外修改托管RLMArray。”在XCTest中

我正在尝试为与Realm交互的视图模型编写一些单元测试。在设备/模拟器上运行时,该逻辑工作正常,但是在单元测试时触发“ RLMException”,“无法在写事务之外修改托管RLMArray”。

我的测试用例如下...

func testThatNewlyAddedPaymentsAreReturned() throws {
    let payment = Payment(recipient: "Matt",amount: Decimal(1.0),date: Date(),note: "")
    try model.addPayment(payment: payment) // Throws exception
    XCTAssertTrue(model.payments?.contains(payment) ?? false)
}

在上面的测试案例中,model变量是视图模型类,它具有简单的单行实现...

func addPayment(payment: Payment) throws {
    try self.budget?.addPayment(payment: payment)
}

这依次调用进行领域交互的Budget类。

func addPayment(payment: Payment) throws {
    let realm = try Realm()
    try realm.write {
        _payments.append(payment)
    }
}

请注意,与异常消息相反,private var _payments = List<Payment>()属性正在Realm写事务中被修改。

我已经在单元测试中配置了默认的Realm配置,如下所示...

override func setUp() {
    var config = Realm.Configuration.init()
    // Set this as the configuration used for the default Realm
    Realm.Configuration.defaultConfiguration = config
    config.inmemoryIdentifier = "BudgetTests"
    try! repository = BudgetRepository.init(realm: Realm(configuration: config))
    try! initialiseViewModel()
}
hunanldxyl 回答:“无法在写事务之外修改托管RLMArray。”在XCTest中

使用no-args初始化程序更新测试设置以初始化领域,从而解决了该问题,例如

替换...

try! repository = BudgetRepository.init(realm: Realm(configuration: config))

...和...

try! repository = BudgetRepository.init(realm: Realm())

奇怪的是,这似乎暗示着使用默认配置打开一个Realm。 Realm()不能产生与初始化一个域并手动提供默认配置相同的领域。

本文链接:https://www.f2er.com/3086951.html

大家都在问