ExercismでC++の演習をテストする方法を学びます。
各演習には、単体テストとCMakeのビルドレシピが用意されています。実装は自分で書きます。 各テストファイルは、自分の実装とリンクして、テストを実行するコンソール用の実行ファイルを作ることを想定しています。テストの実行ファイルを実行すると、失敗したテストごとにメッセージが表示され、テストが失敗したときは0以外の終了ステータスが報告されます。
補足: プロジェクトをビルドするたびに、コードはテストスイートに対してテストされます。コードが1つ以上のテストに合格しなくても、有効なC++コードであれば、コンパイルは実行されます。
各演習は、次の流れで進めます。
各演習には、単体テストと一緒に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がビルド環境を作成したら、自分の環境に合ったコマンドでコードをビルドできます。
make
make exercism CLIアプリを使う場合
以下に、さまざまな環境でCMakeを実行する例を示します。
CMakeのジェネレーター名はUnix Makefilesです。
現在の演習がbobで、演習のフォルダーにいるとします。
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
この例では、CMakeを実行する前に実装用の空ファイルを作成しています。
テストをコンパイルするには、buildディレクトリーでmakeと入力するだけです。すると、コンパイル時のエラーが出るはずです。エラーを修正したら、makeがテストをビルドして実行します。
Visual StudioはCMakeプロジェクトをネイティブにサポートしているので、CMakeを別途インストールしたり、Visual Studioの外で実行したりする必要はないはずです。このガイドに従って、Visual StudioでCMakeプロジェクトをセットアップしてください。
CMakeのジェネレーター名はXcodeです。
現在の演習がbobで、演習のフォルダーにいるとします。
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..
この例では、XCodeでプロジェクトを開けるようにXCodeのファイルを生成します。 XCodeでプロジェクトを開いたら、別のターゲットを追加する必要があるかもしれません。 新しいターゲットを作るには、メニューからFile -> New -> Targetと進み、OS X \ Application \ Command Line Tool -> Nextで言語として_C++_を選び、ターゲット名を指定します。コードはそのターゲットを使って実行します。
ターミナルでXcode x.x not supportedというエラーが出た場合、Xcodeが自分のマシンにインストールされていないか、バージョンが古い可能性が高いです。
App StoreまたはこちらのリンクからXcodeをダウンロードしてインストールしてください。
The CXX compiler identification is unknownのようなエラーは、GCCのインストール手順に従うか、前述のとおりXcodeに別のターゲットを追加することで解決するはずです。
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がテストをビルドして実行します。