Ios RxSwift在模拟UserDefault上观察测试用例
我正在观察userDefaults中的值变化Ios RxSwift在模拟UserDefault上观察测试用例,ios,swift,unit-testing,mocking,rx-swift,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 } 一个可观察的链以副作用开始(比如你发布的o
userDefaults.rx.observe(Int.self,option.userDefaultsKey)
对于单元测试,我做了userDefaultsMock,我不知道如何在更新或设置这些特定键的值时发出
override func setValue(_ value: Any?, forKey key: String) {
tempArray[key] = value
}
一个可观察的链以副作用开始(比如你发布的
observe(::)
),以副作用结束(订阅中的任何内容)。链的开始和结束之间的一切都是逻辑[1]。将该逻辑移到一个单独的函数中,这样就可以在不使用mock的情况下对其进行测试
[1] 此规则的两个例外是
do()
调用和flatMap
调用。其他一切都是需要测试的逻辑。一个可观察的链从一个副作用开始(比如你发布的observe(::)
),到一个副作用结束(订阅中的任何内容)。链的开始和结束之间的一切都是逻辑[1]。将该逻辑移到一个单独的函数中,这样就可以在不使用mock的情况下对其进行测试
[1] 此规则的两个例外是
do()
调用和flatMap
调用。其他一切都是需要测试的逻辑。事实上,我无法模拟rx。观察
,但做了一些变通来完成
我使用了UserDefaults
,但使用了suiteName
,因此不会干扰标准数据库
所以这个技巧帮助了我,因为“可观察”得到了通知
我从中得到了这个想法,实际上我无法模拟
rx。观察
,但做了一些变通来完成
我使用了UserDefaults
,但使用了suiteName
,因此不会干扰标准数据库
所以这个技巧帮助了我,因为“可观察”得到了通知
我从他那里得到了这个主意