首页 > 解决方案 > XCTest 是否在主线程中执行以及如何执行?

问题描述

我正在编写一个支持 Core Data 的 iOS 应用程序。我先编写 Core Data 代码,然后直接在 AppDelegate 的方法中测试它们。在获得初始工作代码后,我决定将 Core Data 测试代码移至 XCTest。这是我第一次使用 XCTest,我认为测试是在与 iOS 应用程序不同的进程中运行的,但显然并非如此。例如,测试可以访问 app 设置的托管对象上下文。

所以我的问题是 XCTest 在哪个线程中运行?是主线程吗?我的实验似乎表明了这一点。例如,在主线程中创建的测试访问对象(例如,AppDelegate 实例)和 Xcode 不会抱怨它。如果是这样,我想知道谁安排测试在主线程中运行以及如何安排?

我在控制台中看到类似以下的日志,但它们并未指示底层详细信息。

2020-01-13 11:34:38.212244+0800 ... Launching with XCTest injected. Preparing to run tests.
2020-01-13 11:34:38.559808+0800 ... Waiting to run tests until the app finishes launching.

谢谢你的帮助。

标签: iosxctest

解决方案


我认为测试是在与 iOS 应用程序不同的进程中运行的,但显然并非如此。例如,测试可以访问 app 设置的托管对象上下文。

测试在注入应用程序的捆绑包中。反过来,测试将应用程序视为一个捆绑包;这就是您将应用程序导入测试的原因。(这与 UITests 不同,其中应用程序在单独的应用程序运行器环境中运行。)

所以我的问题是 XCTest 在哪个线程中运行?是主线程吗?我的实验似乎表明了这一点。例如,在主线程中创建的测试访问对象(例如,AppDelegate 实例)和 Xcode 不会抱怨它。如果是这样,我想知道谁安排测试在主线程中运行以及如何安排?

一切都在主线程上运行。目前尚不清楚您对此有什么困难或惊喜会是什么。应用程序运行,它的代码运行,测试是其中的一些代码。


推荐阅读