Objective-C 学习路径上的测试

了解如何在 Exercism 上测试你的 Objective-C 练习


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 用户界面里那么清晰。