问题描述
我正在为我在 iOS 应用中处理的一些代码编写单元测试,但遇到了非常奇怪的行为。
我的代码中的 PassthroughSubject 接收器闭包没有运行,因此测试失败。当我取消注释下面代码中的打印行时,它会通过。它在操场上也毫无问题地通过。我尝试了整个 Xcode 删除派生数据技巧,但没有奏效。我试图将类和单元测试移动到一个完全不同的项目,但它仍然失败。对我来说,这看起来像是 Apple 的错误,但想在这里问一下是否有人有任何见解。看下面的代码。请注意,我对原始项目中的代码进行了一些简化,以使其更易于阅读。这让我觉得 RxSwift 在这一点上比 Combine 更加精致。在 RxSwift 中从未见过这样的事情发生。
class BadPassthroughSendClass {
let publisher = PassthroughSubject<Any,Never>()
var anyCancellable: AnyCancellable?
var sinkClosureBlock: (()->())?
init() {
createSubscription()
}
func createSubscription() {
let subscription = publisher
.subscribe(on: dispatchQueue.global())
.receive(on: dispatchQueue.global())
.sink { [uNowned self] event in
sinkClosureBlock?()
}
anyCancellable = AnyCancellable(subscription)
}
}
class UnitTests: XCTestCase {
func testBadPassthroughClass() {
let badClass = BadPassthroughSendClass()
let sinkExpectation = expectation(description: "Sink closure should fire")
badClass.sinkClosureBlock = {
sinkExpectation.fulfill()
}
// print("pass the test with this line")
badClass.publisher.send("my test message")
waitForExpectations(timeout: 0.5)
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)