Swift Testing Completion Handl... Notiz

Swift Testing Completion Handler

Der Autor migriert XCTest-Fälle zu Swift-Testing, aber stieß auf ein Problem beim Testen von Code, der auf Abschluss-Handlern angewiesen ist. Der Code verwendet eine benutzerdefinierte NSPersistentContainer-Unterklasse, die Core-Data-Speicher asynchron mit einem Abschluss-Handler lädt. In XCTest verwendete der Autor ein Erwartungsmechanismus, um den asynchronen Vorgang zu testen. Das XCTest-Framework bietet eine Möglichkeit, eine Erwartung zu erstellen, als erfüllt zu markieren und auf ihre Erfüllung innerhalb einer Zeitüberschreitung zu warten. Allerdings verwendet Swift-Testing keine Erwartungen und seine Bestätigungen sind nicht geeignet für das Testen von Abschluss-Handlern. Um den Test zu migrieren, verwendet der Autor eine Swift-Fortsetzung, um den Abschluss-Handler-Aufruf in einen asynchron-kompatiblen Aufruf umzuwandeln. Dieser Ansatz kann auch in XCTest verwendet werden, wodurch die Notwendigkeit von Erwartungen entfällt. Der Nachteil dieses Ansatzes ist, dass das Versäumnis, die Fortsetzungsmethode aufzurufen, den Test blockieren kann und die Fortsetzung genau einmal aufgerufen werden muss. Der Test kann dann leicht zu Swift-Testing migriert werden, indem XCTest-Asserts durch #expect ersetzt werden. Der resultierende Test verwendet eine Swift-Fortsetzung, um den asynchronen Vorgang zu testen und die erwarteten Ergebnisse zu überprüfen.