测试使用Realm addNotificationBlock的代码

时间:2016-11-02 16:51:39

标签: ios swift testing realm

有没有办法配置Realm以便同步触发通知回调(注册addNotificationBlock)?特别是,我想在测试中使用这种行为。

由于回调是异步的,因此无法在测试中使用它们。因此,有必要注入一个在生产中包装通知注册的依赖项,而是注入一个模仿测试行为的依赖项。

这不是一个很好的解决方案,因为它a)需要更多的代码和b)代码正在对Realm做出假设,例如如何构造RealmCollectionChange

如果无法同步启动,可能有人建议更好地测试依赖RealmCollectionChange的代码?

1 个答案:

答案 0 :(得分:2)

您可以使用expectation(description:)waitForExpectations(timeout:handler:)来测试异步方法,如下所示。

func test() {
    let q = DispatchQueue(label: "Q")

    q.async {
        let realm = try! Realm()
        try! realm.write {
            realm.add(TestObj())
        }
    }

    let e = expectation(description: "Notification fired")

    let realm = try! Realm()
    let token = realm.addNotificationBlock { (notification, realm) in
        print("notification block")
        e.fulfill()
    }

    waitForExpectations(timeout: 2.0, handler: nil)
    token.stop()
}