【发布时间】:2016-05-09 15:54:13
【问题描述】:
我有一系列单独的XCTest 单元测试,每个测试都运行一个 JSON 解析函数 - 作为解析的一部分,任何存在的 Realm 对象类的实例都将被删除,然后再基于 JSON 重新创建它们正在处理中。
在每个测试类的setup() 函数中,Realm 实例是这样设置的:
Realm.Configuration.defaultConfiguration.inMemoryIdentifier = NSUUID().UUIDString
do {
realm = try Realm()
} catch let error as NSError {
// handle error
fatalError("Unable to establish Realm stack: \(error.localizedDescription)")
}
// Clear Realm of everything
try! realm.write {
realm.deleteAll()
}
据我了解,这应该为每个测试创建一个完全唯一且空的 Realm 实例。
单独运行每个测试类可以正常运行,但是当作为完整测试套件的一部分运行时,随机选择的测试会失败并出现错误:
caught "RLMException", "Object has been deleted or invalidated."
我认为这是因为当所有测试类作为测试目标的一部分同时运行时,某处存在竞争条件。这就提出了三个问题:
- 这是竞争条件,还是我误解了错误?
- 是否有任何方法可以在每个测试类中绝对强制分离领域以防止竞争条件?
- 有没有办法强制测试目标同步运行每个类?
更新将冲突测试分离到单独的测试目标中可以防止冲突,但这并不是真正的最佳解决方案。
【问题讨论】:
标签: ios unit-testing realm xctest