Ios RxSwift在模拟UserDefault上观察测试用例

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中的值变化

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
,因此不会干扰
标准数据库

所以这个技巧帮助了我,因为“可观察”得到了通知

我从他那里得到了这个主意