Последовательные юнит-тесты не пройдены, хотя они проходят индивидуально - PullRequest
0 голосов
/ 03 февраля 2019

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

Однако, если я выполняю весь пакет, один тест зависает, когда он должен инициировать синглтон.Он зависает только в том случае, если он выполняется после определенного другого модульного теста - если я изменяю порядок, весь тестовый костюм успешно выполняется.
Если я приостанавливаю выполнение зависшего модульного теста, трассировка стека выглядит следующим образом:
enter image description here

Выполнение зависает в операторе static let shared = StoreManager():

class StoreManager: NSObject, CalledByDataStoreInStoreManager {
    static let shared = StoreManager() // Instantiate the singleton
// …
}  

Другой модульный тест, который он выполнял ранее и который приводит к зависанию тестане использует StoreManager синглтон.

Мой вопрос:
В чем может быть причина того, что 1-й тест допускает сбой инициализации синглтона во 2-м тесте, хотя этот синглтон не используется в 1-м тесте

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Решено: побочный эффект, на который мне указал ответ BHendricks, был следующим:
Поскольку мое приложение использует также часы, сеанс наблюдения активируется в делегате приложения, как рекомендовано Apple.Это было сделано путем вызова функции в экземпляре WatchSessionManager, и при инициализации этого экземпляра была предпринята попытка инициировать синглтон, который также пытается инициировать Storemanager.
Это создало тупик цикла инициализации.

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

0 голосов
/ 04 февраля 2019

Таким образом, очевидный ответ заключается в том, что в первом тесте возникает побочный эффект, который влияет на ваш второй тест.Однако именно то, что этот побочный эффект, зависит от двух вещей:

  • Что тестируется в первом тесте
  • Что происходит в инициализаторе для StoreManager

Из вашего описания звучит, как будто первый тест каким-то образом влияет на то, что затем используется в StoreManager init, что не затрагивается, если этот тест не запускается перед вашим 2-м тестом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...