在我的单元测试应用程序中,我们的团队严重依赖工具来执行异步测试 - ConcurrencyExtras - withMainSerialExecutor
该工具增加了在主线程上启动测试代码的可能性,并且我们还可以添加await Task.yield()
块来等待某些耗时的操作完成
它运行良好,但看起来测试执行时间增加了,我想要缩短执行时间。
到目前为止,我发现的唯一解决方案是在这里建议添加
override func invokeTest() {
withMainSerialExecutor {
super.invokeTest()
}
}
在每个测试开始时,删除withMainSerialExecutor
所有地方。它起作用了,现在我的异步测试运行得更快了。
我的问题是 - 为什么它缩短了异步测试的执行时间?我所做的基本上是强制每个测试在主线程上执行,但手动添加的withMainSerialExecutor
块也做了同样的事情。也许有人有其他解决方案来缩短异步测试的执行时间?
从“长”区域(超过 0.1 秒)移至短的测试示例
func testHasLoaded() async {
/// Arrange
sut = makeVM()
var hasLoaded = String()
sut.dataHasFinishedLoading = {
hasLoaded = "hasLoaded"
}
/// Assert
await Task.megaYield()
XCTAssertEqual(hasLoaded, "hasLoaded")
}
原始(0.11秒):
func testHasLoaded() async {
withMainSerialExecutor {
/// Arrange
sut = makeVM()
var hasLoaded = String()
sut.dataHasFinishedLoading = {
hasLoaded = "hasLoaded"
}
/// Assert
await Task.megaYield()
XCTAssertEqual(hasLoaded, "hasLoaded")
}
}