ios - 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.
谢谢你的帮助。
解决方案
我认为测试是在与 iOS 应用程序不同的进程中运行的,但显然并非如此。例如,测试可以访问 app 设置的托管对象上下文。
测试在注入应用程序的捆绑包中。反过来,测试将应用程序视为一个捆绑包;这就是您将应用程序导入测试的原因。(这与 UITests 不同,其中应用程序在单独的应用程序运行器环境中运行。)
所以我的问题是 XCTest 在哪个线程中运行?是主线程吗?我的实验似乎表明了这一点。例如,在主线程中创建的测试访问对象(例如,AppDelegate 实例)和 Xcode 不会抱怨它。如果是这样,我想知道谁安排测试在主线程中运行以及如何安排?
一切都在主线程上运行。目前尚不清楚您对此有什么困难或惊喜会是什么。应用程序运行,它的代码运行,测试是其中的一些代码。
推荐阅读
- django - 将 Django 查询结果作为链表
- php - 如果用户表城市与服务表城市匹配,如何在laravel中向所有用户发送短信?
- angular - Angular - 在第 5 个按钮单击时添加 ngClass
- sage - 基数为 4 的线性独立子集的数量
- python - 等效于 DecisionTreeRegressor 的 predict_proba
- python - Using Python Z3 with QWORDs
- linux-device-driver - Linux I2C driver porting issue
- c# - EF6 with MySQL - can't add new row
- c# - How to Map the results of Sql query onto Objects in Net Core2?
- apache-spark - 'CrossValidatorModel' object has no attribute 'featureImportances'