IOS Почему модульное тестирование класса вызывает ViewController - PullRequest
0 голосов
/ 07 ноября 2018

Я написал модульный тест, как показано ниже:

class Test445Tests: XCTestCase {
    func testPerformanceExample() {
        XCTAssert(true)
    }
}

Когда тест выполняется, что-то вызывает ViewController.viewDidLoad! Может кто-нибудь объяснить, почему это происходит?

class ViewController: UIViewController {

    static var s = false

    override func viewDidLoad() {
        super.viewDidLoad()
        ViewController.s = true // put the debugger here.
    }


}

Если вы напишите этот код и включите отладчик в ViewController, вы можете проверить, остановится ли отладчик на этой строке.

1 Ответ

0 голосов
/ 08 ноября 2018

Создает экземпляр ViewController, потому что ваше приложение создает при запуске ViewController, и ваш тестовый пакет использует ваше приложение в качестве «Хост-приложения»:

host application setting

Если настройка сконфигурирована, как показано выше, это означает, что Xcode запускает тесты в вашем тестовом комплекте, запуская хост-приложение, а затем внедряя в него тестовый пакет.

Вы можете изменить настройку «Host Application» на «None»:

host application set to none

Когда параметр настроен как «Нет», XCode запускает ваш тестовый комплект, используя приложение без графического интерфейса, называемое агентом XCTest, и не запускает ваше приложение, поэтому ваше приложение не получает возможности для создания ViewController.

Обратите внимание, что если для параметра «Хост-приложение» задано значение «Нет», ваш тестовый пакет больше не сможет обращаться к каким-либо API-интерфейсам, определенным в приложении. Любые API, которые вы хотите протестировать, вы должны перейти в среду и связать тестовый пакет с этой платформой (на вкладке «Фазы сборки» для тестового пакета).

Обратите внимание, что даже если для «Host Application» установлено значение «None», Xcode по-прежнему запускает симулятор. В ваших тестовых случаях разрешено использовать системные службы iOS, которые доступны только во время работы симулятора, и XCode заранее не знает, нужны ли эти тесты вашим тестовым ситуациям. Поэтому он должен сначала запустить симулятор, на всякий случай.

...