XC测试自测块修改?

XCTest self measureBlock modification?

XCtest "self measureBlock" 似乎限制为毫秒和 10 次测试代码运行。有什么方法可以修改 measureBlock 的行为以获得更多运行 and/or 纳秒或微秒精度?

TL;DR

Apple 提供了一种通过提供额外的字符串常量来修改 measureBlock: 行为的方法,但它们不支持除默认值之外的任何字符串常量。

详细解释

measureBlock调用以下函数

- (void)measureMetrics:(NSArray *)metrics automaticallyStartMeasuring:(BOOL)automaticallyStartMeasuring withBlock:(void (^)(void))block;

//实现看起来像这样(我不能说 100% 但我很确定):

- (void)measureBlock:(void (^)(void))block {
    NSArray<NSString *> *metrics = [[self class] defaultPerformanceMetrics];
    [self measureMetrics:metrics automaticallyStartMeasure:YES withBlock:block];
}

defaultPerformanceMetrics 是一个 class 函数,它 return 是一个字符串数组。

来自 Xcode 来源

"Subclasses can override this to change the behavior of -measureBlock:"


太棒了,听起来很有前途;我们有定制行为吗?好吧,他们不会给你任何 return 的字符串。默认为 XCTPerformanceMetric_WallClockTime ("com.apple.XCTPerformanceMetric_WallClockTime")

原来 return 除了那个之外没有任何字符串常量。 请参阅 Xcode 6 (link) 中 WWDC 2014 第 414 节测试的幻灯片。

我引用第 158 页:

Currently supports one metric: XCTPerformanceMetric_WallClockTime

在 Xcode 7 中没有添加任何其他内容,所以看来您尝试修改 measureBlock 的运气不佳,抱歉。

我从未发现 measureBlock: 非常有用。如果您想查看替代方案,请查看 Tidbits.xcodeproj/TidbitsTestBase/TBTestHelpers/comparePerformance https://github.com/tipbit/tidbits