Führen Sie im Komponententest den in der Warteschlange mit dispatch_asyc @ übergebenen Block au

Wenn ichdispatch_async ein Block aufMai Warteschlange wie folgt:

-(void) myTask {
  dispatch_async(dispatch_get_main_queue(), ^{
      [self.service fetchData];
   });
}

Im Unit-Test kann ich den in der Hauptwarteschlange übergebenen Block ausführen, indem ich die Hauptschleife wie folgt manuell ausführe:

-(void)testMyTask{
  // call function under test
  [myObj myTask];
  // run the main loop manually!
  [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
  // now I can verify the function 'fetchData' in block is called
  ...
}

Now, ich habe eine andere ähnliche Funktion, die Block an eine sequentielle Warteschlange verteilenauße Hauptwarteschlange:

-(void) myTask2 {
  dispatch_async(dispatch_queue_create("my.sequential.queue", NULL), ^{
      [self.service fetchData];
   });
}

Wie kann ich im Unit-Test den Block jetzt manuell ausführen?

-(void)testMyTask2{
  // call function under test
  [myObj myTask2];
  // How to manually execute the block now?
}

=== Klarstellen ===

Der Grund, warum ich manuell ausführen möchte, liegt darin, dass ich keinen Wait-For-Timeout-Test mag. Da die Wartezeit von der CPU-Geschwindigkeit abhängt, können die Wartezeiten auf verschiedenen Computern unterschiedlich sein. Ich möchte den Block, der an die Warteschlange übergeben wurde, manuell ausführen (genau wie beim Testfall für die Hauptwarteschlange) und dann das Ergebnis überprüfen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage