2014-07-09 13 views
9

Ich habe begonnen, die neuen XCTest-APIs für Asynchron- und Leistungstests zu untersuchen. Die Apple-Beispiele von WWMC funktionieren zwar gut, aber ich konnte nicht herausfinden, wie sie zu kombinieren sind. Das Beste, was ich in der Lage bin, ist das folgende, aber ich erhalte den folgenden Fehler, wenn es läuft:Asynchrone Leistungstests mit XCTest

API-Verletzung - Anruf gemacht, um zu warten, ohne irgendwelche Erwartungen gesetzt worden zu sein.

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]; 
    }]; 
}]; 

Hat jemand etwas Ähnliches erreichen können?

Thx

Antwort

21

Mit etwas Hilfe von Apple, habe ich eine Lösung. Dummes Aufsicht meinerseits, da dies sehr einfach zu lösen ist. Um an die Arbeit zu gelangen, müssen Sie lediglich das Erstellen des Erwartungsobjekts (clsQueryReturnedExpectation) in den measureMetrics-Block einfügen, damit es jedes Mal neu erstellt wird, wenn der Leistungstest ausgeführt wird.

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]; 
    }]; 
}]; 
+0

Kann noch etwas anderes als die Zeit gemessen werden? API-Referenz scheint zu sagen, dass es eine Reihe von XCTPerformanceMetrics braucht, aber ich kann nichts anderes zu messen finden. –

+0

Soweit ich weiß, nein kann man nicht. Ich habe das gleiche gelesen, denke aber, dass Apple gerade nichts implementiert hat. – spottedrabbit