`

OCSlimProject
OCSlimProject是一个用于iOS和macOS的CocoaPod,允许您使用Xcode和Fitnesse创建快速、稳定、自动化的验收测试。
Fitnesse是一个非常强大且全部集成的独立wiki和验收测试框架。它被设计用于ATDD和BDD风格的软件开发。
为什么使用Fitnesse?
"FitNesse是一种用于指定和验证应用程序验收标准的(需求)工具。它充当软件开发过程中不同利益相关者(学科)之间的桥梁。它的wiki服务器使得轻松记录软件变得简单。它的测试执行功能允许您验证文档与软件的一致性,确保文档保持更新且软件没有出现回归。" - Fitnesse 用户指南
用法
运行示例
- 克隆仓库,并在示例目录下运行
pod install
。 - 打开 OCSlimProject.xcworkspace,查看如何将 Mac 和 iOS 验收测试与纯 Xcode 项目集成。
要求
- Xcode 7
- CocoaPods
- Java 1.8(用于 Fitnesse)
它是如何工作的
OCSlimProject 工作原理是创建一个单独的应用目标。这个被称为“验收测试”的目标包含你的应用业务逻辑代码(“系统测试”)加上简单的 fixtures。
Fixtures 是你在 Swift 或 Obj-C 中编写的胶水代码,为你的应用业务逻辑提供了一个薄片包装。这是你的应用代码和 Fitnesse 之间的集成点。Think of Fitnesse as an alternative UI for using your App. As such fixtures (just like View Controllers) should be nothing more than very simple classes that delegate calls to and from your business logic code.
验收测试应用架构与普通应用架构的比较
Fitnesse 通过一个名为 Slim(简单列表调用方法)的通信协议与你应用通信。实现此协议的工作由 cslim 项目 提供,该项目包含一个由 Erik Meyer 编写的 Objective-C 实现。当选择用 Swift 编写 fixture 时,需要你的 fixtures 是 NSObject 的子类。
入门
CocoaPods 供您项目使用,它设计用于通过 Xcode 模板进行集成。这些模板封装了将您的应用与 Fitnesse 集成的操作。
OCSlimProject 通过1. 安装模板
- 从 GitHub 下载 OCSlimProjectXcodeTemplates 并运行 make
$ git clone https://github.com/paulstringer/OCSlimProjectXcodeTemplates.git
$ cd OCSlimProjectXcodeTemplates
$ make
这将为创建 iOS 及 macOS 的接受测试目标添加 Xcode 项目模板。这些模板安装于 ~/Library/Developer/Xcode/Templates/Test。
-
导航至 Xcode 的 '新建目标' 设置中的 '测试' 部分。在 iOS 和 macOS 中,您都会看到两种新的测试目标类型
- 接受测试
此目标将构建 iOS/macOS 应用用于使用 Fitnesse 框架对您的应用进行接受测试。需要一个使用 Cocoapods 的项目。
- 接受单元测试包
此目标将构建 iOS/macOS 单元测试包,它使用 Fitnesse 从接受测试目标生成结果,然后作为 XCTest 结果在 Xcode 中报告。
2. 将 '接受测试' 目标添加到您的项目中
创建 '接受测试' 目标是下一步。完成此步骤后,您就可以开始编写接受测试了。
-
使用 '接受测试' 模板将 'AcceptanceTests' 目标添加到您的项目中。模板适用于 iOS 和 macOS。macOS 目标运行速度更快,iOS 目标允许您使用依赖于 UIKit 的类。
-
使用 CocoaPods 将 OCSlimProject 链接到 'AcceptanceTests' 目标,以下 Podfile 中包含该链接:
target 'AcceptanceTests' do platform :ios, 9.0 pod 'OCSlimProject' end
-
根据需要运行
pod install
或pod update
-
打开 CocoaPods 生成的项目工作空间
-
构建 'AcceptanceTests' 目标以生成应用(代码更改后请重复此步骤)
-
通过在项目根目录中运行脚本
./LaunchFitnesse
启动 Fitnesse -
如果需要,按照提示下载 Java 1.8
-
现在,Fitnesse 已启动,检查 示例 并运行测试
3. 开发坚如磐石、疾如闪电的验收测试!
现在你已准备好并已设置好,可以开始为 iOS 和 macOS 应用开发坚如磐石、疾如闪电的自动验收测试了。
-
要了解一个非常基础的介绍,请遵循此 逐步教程,介绍如何编写带验收测试的示例应用。
-
查看示例项目
- 井字棋
- 舒适家园
- 通过 @dcutting 提供 RemixStarBrowser
-
以下是一个例子
-
有关使用 BDD 和 Fitnesse 开发软件的更深入的教程,请查看以下 CleanCoder 视频教程。
与 XCTest 集成
OCSlimProject 通过支持 XCTest 简捷地集成到你的开发和 CI 工作流程中。在 Xcode 或通过 xcodebuild 运行并查看你的 Fitnesse 验收测试结果报告。
-
按照上一个示例中的步骤完成操作以创建验收测试目标
-
使用 'Acceptance Unit Test Bundle' 模板为项目添加一个 'AcceptanceUnitTests' 目标*。
您最初选择的模板应与验收测试目标的平台相匹配。例如,如果您有一个iOS的验收测试应用程序,请使用iOS验收单元测试包。
-
在项目设置中将“Fitnesse Suite页面名称”设置为“OCSlimProjectExamplePage”。
-
编辑您的Podfile,并添加以下Podfile条目。
target 'AcceptanceUnitTests' do platform :ios, 9.0 pod 'OCSlimProjectTestBundleSupport' end
-
运行
pod update
-
重要 在构建阶段中将您的“AcceptanceTests”目标添加为此新目标的“目标依赖”。这确保在运行测试之前已经构建了最新代码。
-
按CMD-U并验证验收测试是否运行,并显示与在Fitnesse中运行时相同的结果。
最后
- 将“AcceptanceUnitTest”目标添加到您希望验收测试作为您的开发和测试工作流程一部分运行的任何方案的测试阶段。例如,将“AcceptanceUnitTest”添加到主应用程序目标的测试阶段。这样,它将在运行常规单元测试的同时运行验收测试。
已知的某些问题
云CI示例:Travis
由于从Xcode的新映像启动模拟器存在异常长的延迟,当与CI系统(如Travis)集成时存在已知问题。(这可能会影响到其他使用新虚拟机镜像进行集成的CI系统。)
关于--no-integrate的问题
目前不支持使用选项pod install --no-integrate
的项目。有关如何解决的方法,请查看此问题的详细信息。
** CI System Script **
xcodebuild -workspace <Workspace> -scheme <AcceptanceUnitTestBundleScheme> -destination 'platform=iOS Simulator,name=iPhone 6s' test
** TEST FAILED **
The command "set -o pipefail && xcodebuild -workspace <Workspace> -scheme <AcceptanceUnitTestBundleScheme> -destination 'platform=iOS Simulator,name=iPhone 6s' test" exited with 65.
错误表现为在尝试仅运行以 iOS 为基础的 '验收单元测试包' 时失败,如同本示例中所示。调查结果并不明确,似乎指向问题是由于 XCTest 在等待负责生成 Fitnesse 测试结果的构建阶段时超时。这个过程本身又依赖于启动模拟器。由于某些未知原因,模拟器永远不会完成。
解决方案
解决方案就是运行一些其他单元测试后再运行你的方案。通常这只需要确保你的实际单元测试已经运行。这似乎会准备模拟器,以便当 Fitnesse 需要它时,它已经就绪。
查看此项目的 Travis 配置 以获取示例。
致谢
此仓库的所有者对以下包含的资源不享有版权(除归所有者署名的资源外)。这是一个方便的轻量级包装,可能受这些资源启发或使用了这些资源以及一些项目粘合剂。目的是自动化设置 Xcode 项目的流程,以便更容易地使用 'ocslim' 并与 Fitnesse 集成。
Fitnesse
由 Robert Martin, Micah Martin 及 Fitnesse.org 贡献者创建。
OCSlim, RunTestsTargetWithSlimPort
由 Erik Meyer, Doug Bradbury, 8th Light 创建。
https://github.com/ericmeyer/ObjectiveCSlim
https://github.com/dougbradbury/cslim/tree/ocslim
exportenv.sh
由 Jon Reid 创建。
https://github.com/jonreid/XcodeCoverage
Xcode 项目模板,OCSlimProjectTestBundleSupport,启动 Fitnesse
由 Paul Stringer 创建。
https://github.com/paulstringer/OCSlimProject
许可证
OCSlimProject项目受MIT许可证的许可。有关更多信息,请参阅LICENSE文件。