Exercism 只会下载一个测试文件。你需要手动创建该练习对应的头文件和源文件,还需要把测试文件、头文件(.h)和源文件(.m)组成一个 Xcode 项目文件。另一种做法是使用下面介绍的测试运行器工具。
在 Xcode 中创建项目
- 启动 Xcode,新建一个项目。
- 选择 OS X > Application,然后选择 Command Line Tool。
- 点击 Next,项目名建议用 ExerciseName。
- 点击 Next,把项目保存到 exercism 的练习目录中。
- 项目创建好之后,点击 Editor > Add Target。
- 选择 OS X > Test,再选择 OS X Unit Testing Bundle。
- 把 target 命名为 ExerciseName Tests。
- 在左侧窗格(也就是导航器)中打开 Project navigator,展开 ExerciseName Tests 文件夹,然后打开 ExerciseName_Tests.m 文件。
- 用你从 exercism 拿到的测试文件替换它的内容。
- 在该文件中,把所有 “test_suite” 替换为 “ExerciseName_Tests”。
- 在右侧窗格中找到 File Template library(或者按 CTRL+OPTION+CMD+1),把 Cocoa Class 模板拖到 Project navigator 里的 ExerciseName_Tests 文件夹中。
- 把它命名为 ExerciseName,并选择 ExerciseName Tests 作为它的 target。
- 现在 ExerciseName_Tests 目录里会多出两个文件:ExerciseName.h 和 ExerciseName.m。
- 在 Project navigator 中点击你的项目。
- 在 targets 列表中点击 ExerciseName Tests。
- 在编辑器的导航栏中选择 Build Phases。
- 确认你的两个 .m 文件都在 compile sources 列表中。
- 按 CMD+5 切换到 Test navigator。
- 右键点击名为 ExerciseName Tests 的 bundle,然后点击 Enable ExerciseName_Tests。
- 把鼠标悬停在 Test navigator 中的 bundle 上,点击出现的右向三角形即可运行测试,也可以按 CMD+U。
测试会通过 Xcode 运行。
注意: 如果你遇到错误 “No visible @interface for ExerciseName declares the selector ExerciseSelector,”,说明你的步骤并没有做错,只是还没有在头文件/实现文件里写任何内容。在 .h 文件中声明方法、在 .m 文件中定义方法之后,测试就会给出更有帮助的错误,引导你完成这道练习。想了解更多细节,可以阅读这篇 Objective-C 类入门。
测试运行器
除了手动生成项目文件,另一种做法是使用一个用 ruby 编写的测试运行器工具 objc,它会替你创建项目文件,并放入测试文件、头文件和源文件。
$ gem install objc
用下面的命令运行测试:
$ objc -x ExerciseName
(注意 -x/--xcodebuild 标志,它指定使用 xcodebuild 而不是 xctool。后者在 Xcode 的最新版本中无法使用。)
objc 工具会用练习名来查找测试文件ExerciseNameTest.m、头文件ExerciseName.h和源文件ExerciseName.m。这些文件会被放进一个临时的 Xcode 项目,然后用 xcodebuild 运行该项目的测试。
虽然有了 objc,你完成这些练习时完全不用启动 Xcode,但命令行给出的错误信息和反馈不如 Xcode 用户界面里那么清晰。