我正在观察userDefaults中的值更改
userDefaults.rx.observe(Int.self, option.userDefaultsKey)
对于单元测试,我做了userDefaultsMock,但是当更新或设置这些特定键的值时,我不知道如何发出
override func setValue(_ value: Any?, forKey key: String) {
tempArray[key] = value
}
答案 0 :(得分:0)
Observable链以副作用(例如您发布的observe(_:_:)
)开始,并以副作用(无论订阅中的内容是什么)结束。链的起点和终点之间的所有内容都是逻辑[1]。将该逻辑移至单独的函数,以便无需进行模拟即可对其进行测试。
[1]此规则的几个例外是do()
调用和flatMap
调用。其他一切都是需要测试的逻辑。
答案 1 :(得分:0)
实际上,我无法嘲笑rx.observe
,但做了一些工作来完成。
我使用了UserDefaults
,但使用了suiteName
,所以不会打扰standard database
所以这个技巧帮助我观察到了通知。
我从https://medium.com/@davidlin_98861/testing-userdefaults-cd86849fd896那里得到了主意