Понимайте и сокращайте время выполнения тестов с помощью пакета ConcurrencyExtras в Swift.IOS

Программируем под IOS
Anonymous
Понимайте и сокращайте время выполнения тестов с помощью пакета ConcurrencyExtras в Swift.

Сообщение Anonymous »

В моем приложении для модульного тестирования наша команда сильно полагается на инструмент для выполнения асинхронного теста — ConcurrencyExtras — withMainSerialExecutor
Этот инструмент добавляет возможность запуска тестового кода в основном потоке, а также мы могли бы добавить блок await Task.yield(), чтобы дождаться завершения какой-либо длительной операции
Он работает хорошо, но кажется, что время выполнения тестов увеличилось, и я хочу его сократить исполнение время.
Пока что здесь предлагается только единственное решение, которое я нашел: добавить
override func invokeTest() {
withMainSerialExecutor {
super.invokeTest()
}
}

В начале каждого теста и везде удаляйте с помощью MainSerialExecutor.
Это работает, и теперь мои асинхронные тесты выполняются быстрее.
Мой вопрос: почему это сократило время выполнения асинхронных тестов? По сути, я заставил каждый тест выполняться в основном потоке, но добавленный вручную блок withMainSerialExecutor сделал то же самое. Может быть, у кого-то есть другое решение, позволяющее сократить время выполнения асинхронного теста?
Пример теста, который перешел из «длинной» зоны (более 0,1 секунды) в короткую
func testHasLoaded() async {
/// Arrange
sut = makeVM()
var hasLoaded = String()
sut.dataHasFinishedLoading = {
hasLoaded = "hasLoaded"
}

/// Assert
await Task.megaYield()

XCTAssertEqual(hasLoaded, "hasLoaded")
}

Оригинал (0,11 секунды):
func testHasLoaded() async {
withMainSerialExecutor {
/// Arrange
sut = makeVM()
var hasLoaded = String()
sut.dataHasFinishedLoading = {
hasLoaded = "hasLoaded"
}

/// Assert
await Task.megaYield()

XCTAssertEqual(hasLoaded, "hasLoaded")
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ge-in-swif

Вернуться в «IOS»