C++ 赛道上的测试

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


每个练习都提供单元测试和一份 CMake 构建配方。实现由你来写。 每个测试文件都会与你的实现链接,生成一个运行测试的控制台可执行文件。运行这个测试可执行文件会为每个失败的测试打印消息,并在测试失败时返回非零的退出状态。

注意: 每次构建项目时,你的代码都会对照测试套件进行测试。即使你的代码没能通过一个或多个测试,只要它是合法的 C++ 代码,仍然会被编译。

完成每个练习的过程是:

  • 用 CMake 创建初始构建
  • 对每个单元测试:
    • 先解决编译错误,让测试能够失败。
    • 只实现刚好能让测试通过的部分。
    • 重构你的实现,提高可读性、减少重复,等等。
    • 取消注释下一个测试

用 CMake 创建初始构建

每个练习都会附带一个 CMakeLists.txt 文件和单元测试。里面有一套现成的 CMake 配方,会替你处理构建。你不需要编辑这个文件。这套配方假定你的实现由一个头文件和一个源文件组成,文件名与练习同名。

例如,练习 bob 期望实现放在 bob.h 和 bob.cpp 中。对于名字里带连字符的练习,源文件假定使用下划线,所以 word-count 期望的是 word_count.h 和 word_count.cpp。你也可以认为自己的实现足够简单,完全可以只放在头文件里,这时可以省略 cpp 文件。

在运行 CMake 之前,先创建好初始的实现文件。 如果在为练习 bob 运行 CMake 时没有 bob.h 和 bob.cpp 这两个文件,CMake 就会报错,提示找不到文件。这些文件可以是空的,但必须存在。

有了这套配方,只要用一个合适的生成器和练习目录的路径运行 cmake -G,CMake 就能为你的环境生成合适的项目。CMake 会生成适合你操作系统的构建脚本。为了让这些生成的文件和练习源代码分开,常见的做法是建一个名为 build 的目录,用来存放这些生成的构建文件以及编译产物。这样你的练习文件夹就能保持整洁。

CMake 创建好构建环境后,你就可以用适合自己环境的命令来构建代码:

  • Linux 配合 make:make
  • Windows 配合 Visual Studio:从菜单中选择 Build / Build Solution。
  • MacOS 配合 Xcode:从工具栏中选择 Build
  • MacOS 配合“Unix Makefile”:make 如果你使用 exercism CLI 应用

下面是一些在不同环境下运行 CMake 的例子。

Linux 配合 Make

CMake 的生成器名称是 Unix Makefiles。假设当前的练习是 bob,而且我们在练习文件夹里:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

这个例子展示了在运行 CMake 之前先创建空的实现文件。

只需在 build 目录里输入 make 就能编译测试。这时应该会出现编译期错误。修好这些错误后,make 就会构建并运行测试。

Windows 配合 Visual Studio

Visual Studio 原生支持 CMake 项目,所以你不需要单独安装 CMake,也不用在 Visual Studio 之外运行它。按照这份指南在 Visual Studio 中设置 CMake 项目。

MacOS 配合 Xcode

CMake 的生成器名称是 Xcode。假设当前的练习是 bob,而且我们在练习文件夹里:

$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..

这个例子会生成 XCode 文件,让你可以在 XCode 中打开项目。项目在 XCode 中打开后,你可能需要再添加一个 target。要新建 target,从菜单进入 File -> New -> Target,选择 OS X \ Application \ Command Line Tool,点 Next,语言选 C++,然后填一个 target 名称。用这个 target 运行代码。

如果你的终端报出 Xcode x.x not supported 错误,很可能是你的机器上没有安装 Xcode,或者版本太旧。请通过 App Store 或这个链接下载并安装 Xcode。类似 The CXX compiler identification is unknown 的错误,通常按照安装 GCC 的说明操作,或者按上一段所说在 Xcode 中再加一个 target,就能解决。

MacOS 配合 Make (使用 Exercism CLI 时)

这个例子专门帮助那些想用 Exercism CLI 应用来配置、测试和提交 C++ 练习的人。

CMake 的生成器名称是 Unix Makefiles。假设当前的练习是 bob,而且我们在练习文件夹里:

$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test

在这个例子里,我们确实在运行 CMake 之前创建了空的实现文件,但没有创建空的 build 目录。这是因为 Exercism CLI 会用根目录下的 .exercism/metadata.json 文件来解析测试用例。

只需在根目录下输入 exercism test 就能编译测试。这时应该会出现编译期错误。修好这些错误后,再次运行 exercism test 就会用 Exercism CLI 构建并执行测试。