为啥带有基于谓词的期望的 XCTest 这么慢?
Posted
技术标签:
【中文标题】为啥带有基于谓词的期望的 XCTest 这么慢?【英文标题】:Why is XCTest with a predicate based expectation so slow?为什么带有基于谓词的期望的 XCTest 这么慢? 【发布时间】:2020-04-09 00:02:57 【问题描述】:有人知道为什么 XCTest 对谓词的期望如此缓慢吗?在我看来,即使谓词应该立即通过,Swift 和 ObjC 的最短执行时间也是 1 秒。用if !pred.evaluate(with:obj)
包装我的期望将测试执行速度提高了几个数量级。
import XCTest
struct TestObject
var value = true
class SwiftPredicateTestTests: XCTestCase
func testPerformanceExample()
let obj = TestObject()
self.measure
let pred = NSPredicate(evaluatedObject, _) in
return (evaluatedObject as! TestObject).value
let expect = expectation(for: pred, evaluatedWith: obj, handler: nil)
wait(for: [expect], timeout: 30)
measured [Time, seconds] average: 1.013, relative standard deviation: 2.464%, values: [1.087598, 1.002806, 1.003474, 1.001123, 1.004604, 1.007821, 1.004224, 1.005046, 1.005243, 1.007546],
【问题讨论】:
以 FB7657125 提交给 Apple 【参考方案1】:这种效果在waitForExistence
方法中也很明显。
他们可能在循环条件检查之前使用sleep(1)
。
【讨论】:
当我将它添加到某些测试的拆解中时,我注意到了这一点,所有 200 个测试都开始花费一秒钟,而不是之前的一小部分。以上是关于为啥带有基于谓词的期望的 XCTest 这么慢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥带有 SourceTree 的 WSL2 上的 Git 对我来说这么慢?