Как утверждать, что ошибка выдается асинхронной при тестировании? - PullRequest
4 голосов
/ 31 октября 2019

Мы можем проверить выброшенные ошибки с XCTAssertThrowsError. Асинхронные вещи можно проверить с помощью expectation. У меня есть какой-то метод, который отправляет работу в фоновый поток и может в какой-то момент вызвать ошибку.

Можно ли ожидать, что в будущем возникнет ошибка? Мне нужно объединить expectation и XCTAssertThrowsError Я думаю, но я не знаю как.

Проект размножения: https://github.com/Jasperav/ThrowingAsyncError. Просто клонируйте проект и запустите тесты, один из них провалится,Я создал класс, который вылетает через несколько секунд после его выделения. Я хочу убедиться, что он продолжает падать через несколько секунд, поэтому мне нужен тестовый пример для него.

1 Ответ

0 голосов
/ 08 ноября 2019

Я взглянул на проект воспроизведения, чтобы увидеть, чего вы пытались достичь здесь ...

Насколько я понимаю:

XCTAssertThrowsError - это утверждения, которые принимают блок, который можно бросить. Они просто утверждают, что в синхронный блок выдается ошибка, когда он завершается.

XCTestExpectation - это классы, которые отслеживают, выполняются ли запрошенные условия. Они предназначены для отслеживания асинхронного поведения кода. Необходимо сохранить объекты и ссылки и проверить их позже.

То, что вы пытаетесь сделать, это заставить что-то вроде XCTestExpectation работать XCTAssertThrowsError выполняет те же действия, что и при синхронном утверждении о том, что асинхронный блок будет генерировать. Это не будет работать таким образом из-за того, как код выполняется и возвращается.

Асинхронный код, на который вы ссылаетесь, не генерирует (инициализатор таймера). Насколько я знаю, нет никаких асинхронных блоков, которые могут бросить. Возможно, вопрос, который вы должны задать, заключается в том, как мы можем сделать так, чтобы синхронная операция иногда выполнялась синхронно, но также и асинхронно, когда это ощущается как ...

В качестве альтернативы для дополнительной сложности в каждом классе, который вы хотите проверитьЯ нашел решение с минимальным минимумом, чтобы сделать его легко тестируемым и портативным ...

https://github.com/Jasperav/ThrowingAsyncError/pull/1/files

Могу я спросить, почему вы захотите это сделать? как то так?

...