ios - XCTest 中的 "Cannot modify managed RLMArray outside of a write transaction."

标签 ios swift realm

我正在尝试为与 Realm 交互的 View 模型编写一些单元测试。在设备/模拟器上运行时,该逻辑工作正常,但在单元测试时会触发“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变量是 View 模型类,它有一个简单的一行实现...

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

这又会调用 Budget Realm 交互发生的类。

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()
}

最佳答案

更新测试设置以使用无参数初始化程序初始化 Realm 解决了问题,例如

更换...

尝试一下!存储库 = BudgetRepository.init( Realm : Realm (配置:配置))

...与...

尝试一下!存储库 = BudgetRepository.init( Realm :Realm())

奇怪的是,这似乎意味着使用默认配置打开一个 Realm ,例如Realm() 不会生成与初始化 Realm 并手动提供默认配置等效的 Realm。

关于ios - XCTest 中的 "Cannot modify managed RLMArray outside of a write transaction.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58899437/

相关文章:

ios - ObservableObject 的问题

ios - 在 ios 中使用 objective c 将 mp4/video 文件转换为帧

ios - requestTestAccountTokensWithArraysOfPermissions FBSDK 4.x 版本

javascript - super 表达式必须为 null 或函数react-native 和 Realm DB

ios - removeObjectsAtIndexes 导致崩溃

ios - 通过 UILabel 的宽度和高度调整字体大小的最佳方法

swift - 在 Swift 中使用 UIAlertController 更改警报的标题和消息字体

swift 3 FFT 获取声音频率 m4a

android - 从 MutableList<Int> 初始化 Array<Int>

android - 哪个Android数据库可确保安全性和较小的数据库文件大小?