Тестирование iPhone: тестирование IBOutlets

Я на самом деле чувствую себя немного смущенным, спрашивая об этом, потому что он чувствует себя настолько же основательно, как и вы, но он застонал меня часами …

Предположим, у меня есть экземпляр UIViewController (называемый MyViewController), который просто имеет один IBOutlet для UITextField, и когда загружается страница, я либо устанавливаю ее как Enabled, либо не основан на свойстве BOOL.

- (void)viewDidLoad { [super viewDidLoad]; self.surname.enabled = self.allowTextField; } 

Все правильно подключено, и когда я запускаю приложение, он работает так, как ожидалось (лорд – я бы надеялся, что это так, если я не смогу получить эту часть, я, вероятно, не должен писать приложения для iPhone …).

Во всяком случае, я решил быть прилежным и написать приложение Unit Tests для приложения, потому что это то, чем я хочу стать намного более солидным. К сожалению, я не могу для меня понять, почему следующее не работает …

 -(void)testFieldEnabled { MyViewController *myController = [[MyViewController alloc] initWithNibName:nil bundle:nil]; myController.allowTextField = YES; [myController viewDidLoad]; STAssertTrue(myController.surname.enabled, @"Why is this not correct?"); } 

Я придерживаюсь этого примера предельно просто, потому что я действительно не понимаю, почему это не работает, и полагаю, что это должно быть связано с серьезным недостатком в моем понимании модульного тестирования. Не следует ли, чтобы вышеуказанный модуль завершил проверку экземпляра страницы MyViewController, задал свойство, запустил метод и вернул true? На данный момент он продолжает говорить мне, что текстовое поле фамилии не включено.

Спасибо за вашу помощь и счастливый новый год для всех вас!

Это связано с тем, что вызов viewDidLoad вручную фактически не загружает представление. Вы должны вызвать свойство view контроллера вида, которое автоматически загрузит представление (или вызовет loadView вручную).

Попробуйте следующее:

 -(void)testFieldEnabled { MyViewController *myController = [[MyViewController alloc] initWithNibName:nil bundle:nil]; [myController view]; myController.allowTextField = YES; STAssertTrue(myController.surname.enabled, @"Why is this not correct?"); } 

viewDidLoad вызовет только ваш метод делегирования, имеющий ваш код инициализации. Это не приведет к фактической загрузке представления. Кроме того, вам необходимо установить allowTextField после загрузки представления, как и в противном случае, переопределить его значением по умолчанию.

Вы можете использовать «load View» вместо вида «Загрузить». Вам также нужно описать «load View» в My View Controller

  • Какой шаблон обновить интерфейс, используя фоновый поток?
  • Затухание в изображениях UIButton после загрузки с URL-адреса
  • Вызывается ли viewDidLoad при возврате в иерархию диспетчера представлений?
  • Как изменить UISearchController.searchBar.height в iOS11?
  • Динамический буфер в объекте C (с ARC)
  • Обрезание UIImage на пользовательский UIBezierPath при сохранении качества изображения
  • Как считать время в iOS?
  • Где сохранить файлы в приложениях iOS 5?
  • NSDateFormatter получает stringFromDate неправильно
  • Как загрузить ссылку на страницу Facebook в приложении iOS Facebook
  • CLPlacemark.subThoroughfare странные символы?
  • Interesting Posts

    Как удалить «Оптимизированный для iPhone 5» в AppStore

    Внедрение масштабирования и панорамирования в 2-страничном UIPageViewController

    MKLocalSearch возвращает результаты за пределами региона

    Заголовок не отображается в UICollectionView, даже уже зарегистрированном программно в UICollectionViewFlowLayout

    UIImagePickerController дублирует содержимое при закрытии

    Удаление 20000 файлов в applicationWillTerminate

    В iPhone iPhone 6 плюс есть запас на правой и левой стороне компонентов полной ширины

    Мои анимационные JPG не будут выпущены

    Точная высота клавиатуры (с автокоррекцией) в интерактивном режиме на Android

    Получите значение float из NSDictionary

    Плавающий вид во второй ряд с автозапуском

    Расширение iMessage и CoreData

    Проблема с фоновым изображением на панели навигации iOS 7

    Быстрое необязательное связывание с константами и область действия

    Выберите изображение для использования в качестве фона UIViewController во всем приложении

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