如何在 Xcode 8 上可靠地安装和设置快速测试框架?

Posted

技术标签:

【中文标题】如何在 Xcode 8 上可靠地安装和设置快速测试框架?【英文标题】:How to reliably install and setup Quick test framework on Xcode 8? 【发布时间】:2017-05-29 14:28:23 【问题描述】:

背景: 在处理this answer 时,我注意到在Xcode 上正确设置Quick test framework 并不是那么简单。就我而言,经过 3-4 次失败的尝试才最终获得了一个工作版本。而且,我不确定我之前的尝试哪里错了。或者更重要的是,为什么该线程中的提问者每次都会重复运行。然后他也尝试了几次才终于有了一个工作。

问题: 我在问你们是否有可靠的方法来使用 Cocoa pod(或 Carthage 或 Git 子模块)在 Xcode 上设置 Quick Framework,直到运行正常工作的 Quick 测试用例,您愿意分享。

我之前是怎么做到的: 这是我如何创建我的工作Quick framework on Xcode: 1.我按照XCTest article in RayWenderlich site中的步骤搭建XCTest环境。 2. 然后我按照installing Quick添加可可豆荚 3.然后按照Setting up your Xcode中的说明进行操作 4. 然后我在剩下的过程中进行了修改和即兴创作,在谷歌上搜索我遇到的每个问题,尝试这个和那个,直到它起作用。 (其中的步骤包括在我的目标的构建阶段添加快速框架以链接二进制文件)

我不自豪地分享我上面的步骤,但我现在没有更好的方法。我希望通过问这个问题找到更好的方法。问的可能太多了。

我的 Podfile:

target 'PlayQuick' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!

# Pods for PlayQuick

target 'PlayQuickTests' do
    inherit! :search_paths
    # Pods for testing
    pod 'Quick'
    pod 'Nimble' 
end

end

【问题讨论】:

它应该可以在 Xcode 中无需手动设置步骤就可以工作,你能分享你的 Podfile 吗? 我已经用 Podfile 的内容更新了我上面的问题。 添加;我遇到了 2 个类似但不同的问题。第一个是已知的;为什么这些示例被多次调用(在此处描述:***.com/questions/44044433/…)。第二个问题是 Xcode 偶尔会找不到框架。虽然这个可以通过首先构建框架,然后是你的项目来解决;有时这种方法会失败,我不知道为什么。 【参考方案1】:

Git submodule way 是实现这一目标的最精简、最简单的方法。

按照以下步骤从零开始:

1.a.选中 Include Unit Tests 创建 Xcode 项目。

1.b。或者,您可以在现有项目上create unit test target

打开测试导航器。 单击左下角的 + 按钮,然后从菜单中选择 New Unit Test Target...:

2.关闭(1)中的Xcode项目 3. 创建新的 Xcode 工作区。文件 -> 新建 -> 工作区。 4. 打开终端/Bash Shell/Cmd.exe 5. 为 GitHubProjectClones 创建一个新的子目录。

例如:$HOME/Developer/GitHubProjectClones

6. cd到(5)中的子目录:

mkdir 供应商 git 初始化

7. 在Git Submodule section 中按照步骤one

git子模块添加git@github.com:Quick/Quick.git Vendor/Quick git submodule add git@github.com:Quick/Nimble.git Vendor/Nimble git 子模块更新 --init --recursive

8. 按照Git Submodule section 中的步骤two

返回 Xcode 并打开 Workspace: 确保选中项目导航器 文件 -> 将文件添加到: 选择在步骤 7 中创建的 Quick 文件夹。 文件 -> 将文件添加到: 选择在步骤 7 中创建的 Nimble 文件夹。 文件 -> 将文件添加到: 在步骤 1 中选择您的 Xcode 项目。

9. 在测试目标的Link Binary with Library 构建阶段,按照Git Submodule section 中的步骤three 链接Quick.frameworkNimble.framework。 10.你应该能够按照Quick Documentation中的例子进行操作

【讨论】:

这应该比将库与 cocoapods 集成更精简和错误安全?我不这么认为,对不起。涉及太多手动操作。没有版本管理。没有自动项目集成...【参考方案2】:

通过 cocoapods 集成 Quick & Nimble 对我来说开箱即用,没有任何问题(macOS Sierra、Xcode8.3.2、ios 10.3 SDK、Swift 3.1、cocoapods 1.2.1)。

请务必安装最新的稳定 cocoapods 版本 (gem update cocoapods) 并致电 pod install 而不仅仅是 pod update。您也可以通过调用 pod deintegrate && pod install 尝试从头开始重新集成您的 pod。

您的项目中可能存在奇怪的构建设置或类似设置。您可以使用原始测试项目来验证这一点。

如果似乎没有任何效果,您应该上传您的项目(例如到 GitHub),以便社区能够查明问题。

【讨论】:

我已经上传了使用 Cocoapods 方式安装 Quick 失败的尝试:github.com/Shisui-U/TryQuickCocoaPodsWay1 步骤与 Mikasa 详述的步骤类似,除了步骤 5-9,我使用 pods 命令你上文提到的。 gem 更新 cocoapods ;吊舱初始化; vi 播客文件; pod install 然后在 Xcode 中打开 xcworkspace。错误消息是找不到快速模块。 谢谢酒水。我正在度假,现在无法检查项目。如果您只构建一次 pod/项目 (CMD+B),Xcode 应该会找到 Quick Framework。最初的发现问题与索引器/编译器前端解析器的奇怪行为有关 享受你的假期,斯文。当你回来时,你可以检查项目。我尝试了 Product-> Clean (Shfit-CMD-K) 然后 Product -> Build (CMD+B),我得到了这个错误:clang: error: linker command failed with exit code 1 (use -v to see invocation) 从“报告导航器”窗口中,我得到:ld: framework not found Pods_TryQuickCocoaPodsWay clang: error: linker command failed with exit code 1 (use -v to see invocation)【参考方案3】:

按照步骤可靠地设置 Quick and Nimble:

先决条件:

你的机器上安装了 cocoapods (installation Guide)

1) 创建一个新的 Xcode 项目

Xcode—>文件—>新建—>项目

2) 选择Single View App(通常大多数应用程序都使用这个)->下一步

输入产品名称(应用程序名称)-(这里我们使用 Wea​​therForecast)

启用包含单元测试的复选标记

3)安装

打开终端

移动到你的工作目录 cd(你的项目文件夹的路径)

例如:在终端输入 cd /Users/Documents/ WeatherForecast

4) 使用

初始化 pod
Pod init

5) 在您喜欢的文本编辑器中打开新创建的 Podfile。

使用以下内容编辑 podfile

platform :ios, '9.0'

target WeatherForecast’ do

  use_frameworks!

  # Pods for WeatherForecast

  target 'WeatherForecastTests' do

    inherit! :search_paths

    # Pods for testing

    pod 'Quick'

    pod 'Nimble'

  end

5) 保存 podfile。返回终端并

在终端输入pod install

6) 这将安装您的新框架并创建一个 pods 项目。它还将生成一个工作区。您现在应该在处理项目时使用新的工作区。因此,如果您已经打开了您的项目,请关闭它并改为打开 WeatherForecasr.xcworkspace。

7) 设置你的测试类

在您的测试目标中,通过以下方式创建一个新组和文件: 突出显示 WeatherForecast 测试。

文件—>新建—>组

重命名新组 ModelTests

突出显示您的新组

文件—>新建—>文件

选择 Swift 文件,按 Next

将新文件命名为 CurrentSpecs 。按创建

7) 在您的新文件中,将内容替换为以下内容

import Foundation

import Quick

import Nimble

@testable import WeatherForecast

class CurrentWeatherSpecs: QuickSpec 


*之后你可能会遇到错误

“没有这样的模块快速”

“没有这样的模块 Nimble”

以下步骤可修复错误

尝试以下方法:

    打开 Xcode 方案列表

    用“显示”勾选 Nimble and Quick 并关闭。

    选择 Nimble 作为方案并构建 (cmd + B)

    选择 Quick 作为方案并构建(cmd+B)

    将方案改回您的应用方案并查看错误是否消失并且自动完成功能是否有效

这是我经常要做的事情

【讨论】:

请为您的所有代码使用代码高亮功能。谢谢 @NicoS。感谢您的建议

以上是关于如何在 Xcode 8 上可靠地安装和设置快速测试框架?的主要内容,如果未能解决你的问题,请参考以下文章

简单可靠的内存数据库,用于支持 JPA 的快速 Java 集成测试

如何在Windows 8.1 / 10上可靠地窃取/重新获得MFC /桌面应用程序的焦点?

如何在 Windows 8 上安装 Xcode? [复制]

如何在 xcode 5 上安装 ios 8 sdk?

Xcode Server Bots 未运行测试

无法可靠地更新位置 ios 8