"Cannot modify managed RLMArray outside of a write transaction." 在 XCTest 中
"Cannot modify managed RLMArray outside of a write transaction." in XCTest
我正在尝试为与 Realm 交互的视图模型编写一些单元测试。在设备/模拟器上 运行 时,逻辑工作正常,但在单元测试时触发“"RLMException","Cannot modify managed RLMArray outside of a write transaction"。
我的测试用例如下...
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
变量是视图模型class,它有一个简单的一行实现...
func addPayment(payment: Payment) throws {
try self.budget?.addPayment(payment: payment)
}
这又会调用 Budget
class 领域交互发生的地方。
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()
}
更新测试设置以使用无参数初始化程序初始化领域解决了问题,例如
正在替换...
try! repository = BudgetRepository.init(realm: Realm(configuration: config))
...与...
try! repository = BudgetRepository.init(realm: Realm())
奇怪的是,这似乎意味着打开一个具有默认配置的领域,例如Realm()
不会生成与初始化 Realm 和手动提供默认配置等效的 Realm。
我正在尝试为与 Realm 交互的视图模型编写一些单元测试。在设备/模拟器上 运行 时,逻辑工作正常,但在单元测试时触发“"RLMException","Cannot modify managed RLMArray outside of a write transaction"。
我的测试用例如下...
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
变量是视图模型class,它有一个简单的一行实现...
func addPayment(payment: Payment) throws {
try self.budget?.addPayment(payment: payment)
}
这又会调用 Budget
class 领域交互发生的地方。
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()
}
更新测试设置以使用无参数初始化程序初始化领域解决了问题,例如
正在替换...
try! repository = BudgetRepository.init(realm: Realm(configuration: config))
...与...
try! repository = BudgetRepository.init(realm: Realm())
奇怪的是,这似乎意味着打开一个具有默认配置的领域,例如Realm()
不会生成与初始化 Realm 和手动提供默认配置等效的 Realm。