2015-08-30 4 views
8

Почему, когда я тестирую свои контроллеры в Xcode все в порядке, но методы deinit не вызываются. Правильно ли это?UITests: deinit не называется

Хотя приложение работает нормально, это нормально, но не для UITest цели.

Для сложных симуляторов конструкций выделяйте снова и снова несколько объектов и ... не освобождайте их вообще. Таким образом, нередко на медленных машинах приложение иногда уходит без всякой причины ... и тесты не могут быть выполнены.

Использование Xcode 8, iOS 10, macOS Sierra.

+0

Является ли экземпляр, созданный в тестовом коде или в коде приложения хоста? –

+0

Я думаю, в коде приложения хоста. UITests работает с использованием хост-приложения (не уверен). –

+0

Как вы обнаружили, что методы 'deinit' не вызывались? Также, если возможно, отправьте тестовый код. Это может многое помочь. –

ответ

0

Я не могу ответить на ваш вопрос окончательно, не видя образца тестового кода, однако ваш случай заставляет меня подозревать пару вещей.

В основном происходит то, что приложение создает новые процессы для каждого запускаемого вами теста. Первой проблемой для исследования станет утечка памяти внутри кода. Если вы просачиваете память, тестовая инфраструктура, вращающая кучу процессов, может вызвать сбой и позволить этой проблеме летать под радаром во время нормальной работы.

Кроме того, если вы не инициализируете контроллеры явно через функцию разрыва в вашем тестовом классе, процесс обычно просто убивается в конце теста. Если вы хотите протестировать свою повторную инициализацию, я бы предложил явно вызвать срыв в тестах, чтобы проверить ваше поведение в распределении памяти. Кроме того, здесь может быть полезна функция анализа Xcode.

Если вы могли бы опубликовать образец своего тестового кода, который будет большой помощью, и я отредактирую свой ответ соответствующим образом.

0

Удостоверьтесь, что deinit не пуст. Если он пуст, тогда он никогда не будет работать. Укажите все, что вам нужно для освобождения, и проверьте, не работает ли он.

Мое предложение

better to use dealloc method rather than using deinit. 
Смежные вопросы