管理XCTest的iOS构建配置和方案

最初在 这里 发布在XCBlog上

在将iOS应用发布到Apple App Store之前,通常有一个针对内部受众的构建,即质量检查工程师,仅在特定配置的设备上运行的产品所有者。 在此过程中,您可能会听到诸如DEBUG或RELEASE配置之类的信息。 当我们使用Xcode创建新的iOS项目时,Apple为我们提供了两个项目级别的构建配置,即调试和发布。 调试配置通常用于开发和内部项目设置,例如将应用程序指向测试环境,然后使用发行版将应用程序提交到App Store。 但是,在许多情况下,可能会触发对更多内部设置或其他构建配置的需求。 作为一名优秀的iOS开发人员,您必须使用XCTest框架编写单元和UI测试。 通常,开发人员使用调试构建配置或运行单元和UI测试,但是为XCTest创建单独的构建配置会使测试更加独立,可靠和确定性。 在本文中,我们将看到如何为XCTest创建单独的构建配置。

构建配置

在进入创建新的构建配置之前,让我们看看什么是iOS中的构建配置以及为什么使用正确的配置构建应用很重要。 想象一下,我们已经在Xcode中创建了全新的iOS应用。 它将有两个构建配置,分别在iOS项目的“构建设置”中进行调试和发布。

在编译和构建iOS应用程序时,幕后发生了很多事情,例如编译,链接,复制包资源,运行构建脚本等。我们始终可以在xcodebuild日志中看到这些事情。 构建配置定义了我们希望如何在特定设置下构建应用程序,例如,当我们使用模拟器开发应用程序时,“调试信息格式”构建设置不需要生成dSYM文件,因此我们可以使用DWARF进行调试构建。 但是,我们需要发布版本的信息,以便我们可以将DWARF与dSYM文件设置一起使用。 如上图所示,您可以在Xcode的所有构建设置中看到这一点。 简而言之,构建配置定义了一种机制,该机制应如何使用不同的条件或设置构建应用。 在运行使用XCTest框架编写的单元或UI测试时,仍然可以使用调试配置,但是,添加其他配置可以使我们对测试过程进行大量控制。

XCTest的构建配置

现在,我们将添加另一个仅可用于XCTest单元或UITests的构建配置。 通常,单元测试需要较少的配置,因为我们可以直接在应用程序内部访问数据和API。 但是,UITests或XCUITests完全是黑盒子,因此我们需要在那里进行更多配置,以便通过UI测试的特定设置。 让我们从Xcode为示例iOS应用添加另一个构建配置开始。 在Xcode项目级别设置中,选择“信息”选项卡,我们将看到可用配置的列表以及添加更多配置的选项

注意,我们必须进行项目级别的配置才能获得此选项,而不是目标级别的配置。 单击配置中的+按钮。 我们可以通过复制调试或发布配置来添加其他配置。 通常,为了测试目的,我们需要重复调​​试配置,因此我们将其称为xctest在“ 配置”部分下,按+按钮。 选择“ 重复调试配置” 。 命名您的新配置xctest

现在,我们有了全新的构建配置,可用于单元测试或UI测试。 我们可以将用户定义的设置分配给新配置,以便我们可以设置测试特定的配置。 在项目构建设置中,向下滚动到构建设置的最底部,有一个名为User-Defined的部分。 这是将添加和设置配置变量的位置。

预处理器宏

现在,我们添加了新的构建配置,是时候更改预处理器宏了,以便我们可以设置源代码有条件地执行一些代码

现在,我们可以使用调用测试代码的主应用程序中的代码来唤醒此配置。

  #if XCTEST 
//仅测试代码版本代码
#其他
//仅应用程式程式码
#万一

同样,我们可以使用相同的方法来更改不同的环境,例如阶段,测试,但是某些文章已经介绍了该方法。 一些受欢迎的文章是

  • Xcode项目中的多个构建配置
  • 在这里整理xccofig文件
  • 在此处管理iOS项目的不同环境

我们可以使用这些技术来配置应用程序,使其指向测试环境。 我们还可以将这些预处理器宏传递给xcodebuild,如此处所述

与CocoaPods一起使用

如果您已经在使用CocoaPods,则需要进行一些CocoaPods特定的更改。 如前所述,Xcode从调试配置复制了构建配置。 但是,CocoaPods创建了xcconfig文件,仅用于调试和发布配置。 我们必须明确地告诉CocoaPods使用当前的xcode项目为Podfile中的另一个构建配置创建配置文件。

  xcodeproj`your_project.xcodeproj`,'xctest'=>:调试 

上面的代码片段告诉CocoaPods,我们已经从调试构建配置中复制了xctest。 我们还需要将COCOAPODS = 1标志添加到预处理器宏。

XCTest的方案

现在,我们有了单独的构建配置,专用于执行用XCTest框架编写的单元测试和UI测试。 现在该准备运行该配置的环境了。 Xcode具有创建方案以选择我们要运行的配置的机制。 我们可以创建新的方案以在Xcode中运行特定的配置。 让我们创建一个使用Xcode的xctest配置来构建,运行和测试的新方案。 在Xcode中,我们在特定目标的顶部创建了新方案,您可以在此处阅读有关使用方案和测试目标的更多信息

我们可以使用“编辑方案”按钮编辑新添加的方案BuildConfig-xctest以使用xctest构建配置。

我们可以从左侧栏中看到,除了配置文件和发行版之外,我们还修改了所有操作以使用xctest构建配置。 对于xcodebuild,如果我们使用此方案进行构建和测试,则它将使用xctest构建配置。

结论

使用单独的构建配置进行测试,我们可以使我们的应用程序更具可测试性,并减少将测试代码泄漏到生产环境的风险。 应用程序中可以配置很多东西,以通过单元测试,集成测试和UI测试覆盖应用程序。 您是否对单元或UI测试使用不同的构建配置? 您的经历是什么,请在下面的评论中放弃