Vorbehalt - ich lese die paar Fragen über das Testen von Threads, aber möglicherweise die Antwort verpasst, wenn die Antwort da ist und ich es verpasste, bitte zeigen Sie mich in die richtige Richtung.Wie kann ich Einheit testen, dass ein Block des Codes auf DispatchQueue.main ausgeführt wird
Ich möchte testen, dass ein TableView-Aufruf zu reloadData in der Hauptwarteschlange ausgeführt wird.
Dies sollte Code sollte in einer vorübergehenden Prüfergebnis:
var cats = [Cat]() {
didSet {
DispatchQueue.main.async { [weak self] in
tableView.reloadData()
}
}
}
Dieser Code in einem fehlerhaften Test zur Folge haben sollte:
var cats = [Cat]() {
didSet {
tableView.reloadData()
}
}
Was sollte der Test aussehen?
Hinweis für die Testhasser: Ich weiß, dass dies eine einfache Sache zu fangen ist, aber es ist auch eine einfache Sache zu verpassen, wenn Sie Refactoring und Schichten von Abstraktion und mehrere Netzwerkaufrufe hinzufügen und aktualisieren möchten die UI mit einigen Daten, aber keine anderen Daten etc etc ... also bitte antworte nicht einfach mit "Updates auf UI gehe auf den Hauptthread" Ich weiß das schon. Vielen Dank!
Die schnelle 3 Möglichkeit zu fragen, ob ein Thread ein gegebener Thread ist, ist die 'dispatchPrecondition (condition:)' globale Funktion. – matt
@matt Ich kann sehen, wie Sie das in Produktionscode verwenden würden, um sicherzustellen, dass etwas auf dem Hauptthread ist, aber wie würden Sie das in einem Test verwenden? Ich nehme an, Sie würden behaupten, dass die Bedingung erfüllt ist, aber was wäre die Bedingung? –