XCTest self measureBlock修改?

时间:2015-09-02 15:52:46

标签: xcode xctest

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

2 个答案:

答案 0 :(得分:1)

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是一个返回字符串数组的类函数。

来自Xcode源

  

“子类可以覆盖它来改变行为   -measureBlock:

可爱,听起来很有希望;我们有定制行为吗?好吧,他们没有给你任何回报。默认值为XCTPerformanceMetric_WallClockTime ("com.apple.XCTPerformanceMetric_WallClockTime")

事实证明除了那个之外没有任何字符串常量返回。 请参阅Xcode 6中的WWDC 2014 Session 414测试幻灯片(link)。

我引用第158页:

  

目前支持一个指标:XCTPerformanceMetric_WallClockTime

在Xcode 7中没有添加任何其他内容,因此您似乎很难尝试修改measureBlock,抱歉。

答案 1 :(得分:0)

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