如何在不使用等待(for:timeout:)的情况下为连续的Combine发布者编写单元测试



想象一下,我们有一个sut作为发布者,它连续发布值,永远不会结束。在更改某些输入时(例如:我们更改了sut所依赖的一些模拟的@Published属性(,它会发出一个事件。

我们在results数组中收集这些事件,然后检查是否存在确切的预期事件数,而不是更少或更多。

问题是,如何检查在我们预期的发射之后是否没有更多的事件?如果没有wait方法,我们不知道什么时候该检查results数组。

wait会起作用,但对我来说,它就像是联合收割机的拐杖。因为好的单元测试应该很快(参见F.I.R.S.T单元测试原理(。这些wait看起来更像反模式。

我也找不到苹果对此的推荐。

您需要一个测试调度器,它基本上是一个虚拟时间调度器,可以让您控制何时发布基于时间的事件。例如,您可以同时启动所有事件。Combine没有内置的测试调度程序,但您可以使用名为Entwine 的开源测试调度程序

相关内容

  • 没有找到相关文章

最新更新