为什么 XCode 启动应用程序两次以 运行 一个 UI 测试?

Why does XCode start the app twice to run a UI Test?

我正在经历一个相当乏味的过程,让一堆 UI 测试再次工作,但是 运行 每个测试看起来 XCode 启动应用程序两次在模拟器中。一次是白费,然后是另一次真正的测试运行。

我的配置是否有问题导致发生这种情况,或者这种行为是否符合预期?

这是预期的行为。您看到的实际上不是同一个应用启动两次,而是两个不同的应用:

第一次启动是 UITestRunner 应用程序。启动 UITest 时,Xcode 构建一个与您的应用程序交互的 UITestRunner 应用程序。此 运行ner 应用程序是必需的,因为 UITest 的工作方式与单元测试不同。

单元测试 在您的应用范围内工作。换句话说,他们可以访问您应用程序的所有代码、变量和状态。因此,当 运行 进行单元测试时,只会启动您的应用程序。

UITests "use" 您的应用就像用户一样。他们无权访问您的应用代码。他们所能做的就是使用用户界面与应用程序进行交互。 UITests 运行 在与您的应用程序不同的进程中。这就是 UITestRunnerApp 的作用。它综合了您的应用程序可以响应的事件。换句话说:UITestRunnerApp 模拟真实用户。

因此,当启动 UITest 时,您确实会看到启动了两个应用程序。首先是 UITestRunner 应用程序(将立即发送到后台),然后是您的应用程序。