Тестирование обработчиков заве... Заметка

Тестирование обработчиков завершения в Swift

Автор переносит тесты XCTest в Swift Testing, но столкнулся с проблемой при тестировании кода, который полагается на обработчики завершения. Код использует подкласс NSPersistentContainer, который загружает хранилища Core Data асинхронно с помощью обработчика завершения. В XCTest автор использовал механизм ожидания для тестирования асинхронной операции. Фреймворк XCTest предоставляет способ создания ожидания, маркировки его как выполненного и ожидания его выполнения в течение тайм-аута. Однако Swift Testing не использует ожидания, и его подтверждения не подходят для тестирования обработчиков завершения. Чтобы перенести тест, автор использует продолжение Swift, чтобы преобразовать вызов обработчика завершения в асинхронно-совместимый. Этот подход может быть использован в XCTest, убирая необходимость в ожиданиях. Недостаток этого подхода заключается в том, что неудачный вызов метода продолжения может повесить тест, и продолжение должно быть вызвано ровно один раз. Затем тест может быть легко перенесен в Swift Testing, заменив утверждения XCTest на #expect. Полученный тест использует продолжение Swift для тестирования асинхронной операции и утверждает ожидаемые результаты.