我正在尝试为与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()
}