Как я могу использовать NSPredicate для оценки логических выражений в асинхронном тесте? ⇐ IOS
Как я могу использовать NSPredicate для оценки логических выражений в асинхронном тесте?
Я создаю последовательный секвенсор задач, который сможет синхронизировать доставку нескольких объектов в сеть.
Любой поток в приложении может отправлять задачи в секвенсор, поэтому я хочу синхронизировать доставку в секвенсор. По этой причине я сделал секвенсор актером и добавил к нему функцию, которая будет добавлять объекты в очередь в секвенсоре.
Я начал использовать TDD для его создания, но застрял еще до того, как начал.
Мой первый подход заключался в создании теста, который ждал бы остановки выполнения секвенсора, а затем потом проверял бы состояние имитируемого сетевого интерфейса. По этой причине я добавил в секвенсор свойство, которое сообщает мне, работает ли он еще.
Этот тест асинхронно добавит объект в секвенсор, а затем я подожду, пока это будет сделано.
Это код секвенсора:
финальный класс DefaultSequencer: Sequencer { пусть isFinished: Bool = true func AppendObjects (_ объекты: [String]) асинхронный { // TODO: это добавит в очередь и начнет обработку. } } А это код теста:
финальный класс DefaultSequencerTests: XCTestCase { частная переменная sut: DefaultSequencer! переопределить функцию setUp() { sut = DefaultSequencer() } переопределить функцию TearDown() { сут = ноль } func test_appendObjects_ShouldFinish() асинхронный бросок { // Данный пусть объекты = ["1", "2"] // Когда ждут sut.appendTasks(объекты) // Затем пусть предикат = NSPredicate { _, _ в self.sut.isFinished == true } пусть ожидание = XCTNSPredicateExpectation (предикат: предикат, объект: ноль) ожидайте выполнения (из: [ожидание], тайм-аут: 20) // ожидание(для: [ожидание], таймаут: 20) } } Этот тест должен пройти успешно, поскольку по умолчанию для свойства isFinished установлено значение true.
Если я использую метод выполнение, этот тест не пройдет. Однако если я использую метод wait(for:), он пройдет, но отобразится предупреждение о том, что мне не следует использовать этот метод в асинхронной области.
Я делаю это неправильно? Я что-то пропустил? Любая помощь будет оценена по достоинству.
Я создаю последовательный секвенсор задач, который сможет синхронизировать доставку нескольких объектов в сеть.
Любой поток в приложении может отправлять задачи в секвенсор, поэтому я хочу синхронизировать доставку в секвенсор. По этой причине я сделал секвенсор актером и добавил к нему функцию, которая будет добавлять объекты в очередь в секвенсоре.
Я начал использовать TDD для его создания, но застрял еще до того, как начал.
Мой первый подход заключался в создании теста, который ждал бы остановки выполнения секвенсора, а затем потом проверял бы состояние имитируемого сетевого интерфейса. По этой причине я добавил в секвенсор свойство, которое сообщает мне, работает ли он еще.
Этот тест асинхронно добавит объект в секвенсор, а затем я подожду, пока это будет сделано.
Это код секвенсора:
финальный класс DefaultSequencer: Sequencer { пусть isFinished: Bool = true func AppendObjects (_ объекты: [String]) асинхронный { // TODO: это добавит в очередь и начнет обработку. } } А это код теста:
финальный класс DefaultSequencerTests: XCTestCase { частная переменная sut: DefaultSequencer! переопределить функцию setUp() { sut = DefaultSequencer() } переопределить функцию TearDown() { сут = ноль } func test_appendObjects_ShouldFinish() асинхронный бросок { // Данный пусть объекты = ["1", "2"] // Когда ждут sut.appendTasks(объекты) // Затем пусть предикат = NSPredicate { _, _ в self.sut.isFinished == true } пусть ожидание = XCTNSPredicateExpectation (предикат: предикат, объект: ноль) ожидайте выполнения (из: [ожидание], тайм-аут: 20) // ожидание(для: [ожидание], таймаут: 20) } } Этот тест должен пройти успешно, поскольку по умолчанию для свойства isFinished установлено значение true.
Если я использую метод выполнение, этот тест не пройдет. Однако если я использую метод wait(for:), он пройдет, но отобразится предупреждение о том, что мне не следует использовать этот метод в асинхронной области.
Я делаю это неправильно? Я что-то пропустил? Любая помощь будет оценена по достоинству.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Nspredicate, чтобы получить максимальное значение имущества в соответствии с данным значением
Anonymous » » в форуме IOS - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-