2016-10-20 2 views
1

Активация ViewDidAppear в UnitTest:Инициирование ViewDidAppear из UnitTest

Перед тем, как на мой вопрос, я знаю, что есть вопрос очень похож на этот (Unit tests don't call viewDidAppear method), но это не кажется, чтобы ответить на этот вопрос.

Мне интересно, как лучше всего активировать viewDidAppear() на viewController для проверки различных вещей, которые должны произойти в этом методе. Я почти уверен, что плохой практикой является вызов viewDidAppear(); поэтому мне интересно, как назвать это косвенно в тесте.

Я следил за уроком Наташи https://www.natashatherobot.com/ios-testing-view-controllers-swift/ и поэтому открыл, как активировать viewDidLoad(), не называя его напрямую. В нижней части экрана обсуждается использование beginAppearanceTransition(true, animated: true), чтобы называть это косвенно, но это, похоже, не имеет ожидаемого результата для меня.

Любые советы? Спасибо!

ответ

5

Я не думаю, что это плохая практика называть viewDidAppear(false) непосредственно для модульного тестирования. Я сделал это в сотнях единичных тестов без каких-либо побочных эффектов. В конце концов, это viewDidAppear, viewWillAppear и другие методы жизненного цикла. Методы.

Тем не менее, я знаю, что страшно устанавливать иерархию представлений для модульных тестов. С каждой версией iOS неизвестно, какие изменения Apple внесет в частную реализацию, которая может нарушить ваши проверки контроллера. Но пока, единственное предостережение, которое я видел, иногда вам нужно добавить представление контроллера к окну, особенно при тестировании представлений контроллеров.

Я также позвонил loadView() и viewDidLoad() напрямую. Обычно я ссылаюсь на эти два метода в части setup части теста блока контроллера вида. Это мешает мне создать сложную иерархию контроллера просмотра и, таким образом, позволяет мне проверять каждый контроллер представления как единое целое.

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

+0

Можете ли вы объяснить, что вы подразумеваете под «иногда вам нужно добавить представление контроллера в окно»? У вас есть пример кода? Я попытался установить rootViewController окна в свой контроллер представления, но мне все еще не удается вызвать viewDidAppear на моем контроллере представления. –

+0

Nevermind! Я наркоман. Теперь он вызывает мой viewDidAppear, но условие, которое я ожидал, не произошло. Вот почему я тестирую блок. –

0

Учитывая, что они являются методами жизненного цикла, почему бы не использовать тест стиля интеграции (UI Test) и, возможно, попытаться переместить любой логический/установочный код в другой класс или метод, которые легче получить доступ и протестировать. Это сохраняет содержание viewDidLoad до минимума, может быть, просто содержит другой вызов метода

Смежные вопросы