首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模拟和注入ObservableObject

模拟和注入ObservableObject
EN

Stack Overflow用户
提问于 2020-03-04 11:36:15
回答 1查看 608关注 0票数 4

我有一个类Foo,它对ObservableObject有多个依赖项。出于测试目的,我希望创建这些对象的模拟版本,但我无法找到这样做的方法,然后将它们注入到Foo中。

  • I无法创建另一个ObservableObject实现的协议,因为ObservableObject协议有自定义或关联的类型需求,不能用作声明的类型,而
  • 则不能子类ObservableObject,因为它有不能为ObservableObject@Published属性包装成员
EN

回答 1

Stack Overflow用户

发布于 2020-03-04 11:36:15

目前,我看到的唯一方法是编写一个订阅ObservableObject的模拟订阅服务器。

代码语言:javascript
复制
final class SomeState: ObservableObject {
  @Published var someValue: String?
}

如果ObservableObject看起来像这样,您可以像这样实现模拟订阅服务器(我称之为Watcher):

代码语言:javascript
复制
final class SomeStateWatcher {
  let someState: SomeState

  var didSetSomeValue: Bool = false
  var lastSomeValue: String?

  private var someValueSubscriber: AnyCancellable?

  init(someState: SomeState) {
    self.someState = someState

    self.someValueSubscriber = self.someState.$someValue
      .sink(receiveValue: { value in 
        self.didSetSomeValue = true
        self.lastSomeValue = value
      })
  }
}

func testDoStuffThatChangesTheLocalSomeStateProperty() {
  someImplementation.doStuffThatChangesTheLocalSomeStateProperty(with: "Fourty2")

  XCTAssertTrue(someStateWatcher.didSetSomeValue, "It should have published someValue")
  XCTAssertEqual(someStateWatcher.lastSomeValue, "Fourty2", "It should have published the correct value)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60525159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档