RxSwift在模拟的UserDefaults上观察测试用例

时间:2019-06-23 12:45:47

标签: ios swift unit-testing mocking rx-swift

我正在观察userDefaults中的值更改

userDefaults.rx.observe(Int.self, option.userDefaultsKey)

对于单元测试,我做了userDefaultsMock,但是当更新或设置这些特定键的值时,我不知道如何发出

 override func setValue(_ value: Any?, forKey key: String) {
        tempArray[key] = value
    }

2 个答案:

答案 0 :(得分:0)

Observable链以副作用(例如您发布的observe(_:_:))开始,并以副作用(无论订阅中的内容是什么)结束。链的起点和终点之间的所有内容都是逻辑[1]。将该逻辑移至单独的函数,以便无需进行模拟即可对其进行测试。

[1]此规则的几个例外是do()调用和flatMap调用。其他一切都是需要测试的逻辑。

答案 1 :(得分:0)

实际上,我无法嘲笑rx.observe,但做了一些工作来完成。

我使用了UserDefaults,但使用了suiteName,所以不会打扰standard database

所以这个技巧帮助我观察到了通知。

我从https://medium.com/@davidlin_98861/testing-userdefaults-cd86849fd896那里得到了主意