我已经开始探索用于异步和性能测试的新XCTest API。孤立地看,WWMC的Apple示例运行良好,但我一直无法弄清楚如何将它们组合在一起。我能提供的最好的方法是以下方法,但是运行时会收到以下错误消息:

违反API-进行调用以等待而未设置任何期望。

XCTestExpectation *clsQueryReturnedExpectation = [self expectationWithDescription:@"clsQuery returned"];

PFCLSClient *theClient = [[PFCLSClient alloc] init];

[self measureMetrics:@[XCTPerformanceMetric_WallClockTime] automaticallyStartMeasuring:YES forBlock: ^{
   [theClient getStructureOfType:clsImageTypeSVG ForID:idString success: ^(NSDictionary *structureInfo) {
       [clsQueryReturnedExpectation fulfill];
} failure: ^(NSError *error) {
       XCTFail();
       [clsQueryReturnedExpectation fulfill];
}];

   [self waitForExpectationsWithTimeout:5 handler: ^(NSError *error) {
        [self stopMeasuring];
   }];
}];

有人能够完成类似的工作吗?

谢谢

最佳答案

在苹果公司的一些帮助下,我有了一个解决方案。就我而言,愚蠢的监督很容易解决。要开始工作,您需要做的就是将期望对象(clsQueryReturnedExpectation)的创建放在measureMetrics块中,以便在每次运行性能测试时重新创建它。

PFCLSClient *theClient = [[PFCLSClient alloc] init];

[self measureMetrics:@[XCTPerformanceMetric_WallClockTime] automaticallyStartMeasuring:YES forBlock: ^{
    XCTestExpectation *clsQueryReturnedExpectation = [self expectationWithDescription:@"clsQuery returned"];
    [theClient getStructureOfType:clsImageTypeSVG ForID:idString success: ^(NSDictionary *structureInfo) {
       [clsQueryReturnedExpectation fulfill];
    } failure: ^(NSError *error) {
       XCTFail();
       [clsQueryReturnedExpectation fulfill];
    }];

   [self waitForExpectationsWithTimeout:5 handler: ^(NSError *error) {
        [self stopMeasuring];
   }];
}];

关于ios - XCTest的异步性能测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24654792/

10-09 05:16