iOS unit test: проверить, что вызван наблюдатель KVO

У меня есть сценарий тестирования KVO следующим образом:

- (void)testObserverCalled { __block BOOL executed = NO; [[RACObserve(model, dateText) skip:1] subscribeNext:^(id x) { executed = YES; }]; [model setDate:[NSDate date]]; XCTAssertTrue(executed); } 

В настоящее время я использую выполненное значение BOOL, чтобы проверить, вызван ли блок наблюдателя, есть ли лучший способ, например, assert, который должен быть вызван до завершения тестовой функции?

как это:

 XCAssertCalledBeforeFunctionReturn() 

Чтобы я мог изменить свой код на:

 - (void)testObserverCalled { [[RACObserve(model, dateText) skip:1] subscribeNext:^(id x) { XCAssertCalledBeforeFunctionReturn() }]; [model setDate:[NSDate date]]; } 

Вы можете использовать XCTestExpectation . Существует «ручная» версия, где вы указываете ее, когда она выполняется, но для этого случая вы можете использовать встроенный XCTestCase.keyValueObservingExpectation(for:keyPath:handler:) который предназначен именно для вашего сценария.

Основное изменение в вашем желаемом образце кода, как только вы встанете на это ожидание, вам нужно сказать, как долго ждать, прежде чем он waitForExpectations(timeout:handler:) вывод о том, что событие просто не произойдет, заблокировав waitForExpectations(timeout:handler:) после вашего setDate: call.

  • Xcode 5 // iOS 6 и 7 // TDD: OCUnit или XCTest
  • Тест XCTest терпит неудачу, когда тестовый пример «не завершился», когда я NSLog из тестового примера
  • Ошибка при выполнении модульных тестов в Xcode 5.0
  • Как изменить словарь приложения NSProcessInfo приложения из модульного теста?
  • validateForInsert терпит неудачу, когда я устанавливаю связь между двумя действительными объектами
  • Как запустить «единственный тестовый пример» в XCTest?
  • Предоставлять доступ к NAB программно на iOS 7.0 Simulator
  • Как запустить новую установку приложения каждый раз, когда выполняются модульные тесты?
  • Невозможно запустить xctests с помощью @import
  • Как я могу избежать исключения NSInternalInconsistencyException при нажатии на элементы пользовательского интерфейса с помощью XCTest?
  • Тестирование пользовательского интерфейса iOS на изолированном представлении
  • Interesting Posts

    Как ввести аргумент в CGContextSetRGBFillColor?

    CKFetchRecordChangesOperation – moreComing

    Создать оверлей из пользовательского взаимодействия на MKMapView?

    Как установить изображение полной ширины внутри UIScrollView в swift

    Swift 3 UISwitch в TableViewCell теряет состояние при прокрутке

    Тесты Xcode UI – Потерянное подключение к службе тестирования

    Как внедрить Google Login в WkWebView, переключаясь на SFSafariViewController

    iPhone. Не удается запустить приложения с XCode на устройстве iOS 5.0.1, так как обновление iOS от 5.0

    Что делать с этим сообщением?

    AFNetworking – загрузка нескольких файлов + мониторинг через UIProgressView

    UICollectionView не может свернуть или удалить дополнительный вид

    Почему отклоняется SSL-сертификат моего сервера?

    Как передать аудио из URL-адреса приложения iPhone и изменить громкость с помощью AVPlayer?

    kABPersonEmailProperty возвращает странные вещи

    Что такое «необходимость swizzler, чтобы RGB8 мог быть прочитан» о том, что Core Image дает iOS9?

    Давайте будем гением компьютера.