Objective-Cトラックでのテスト

ExercismでObjective-Cの演習をテストする方法を学びます


Exercismがダウンロードするのは、テストファイルだけです。ヘッダーファイルと、演習に対応するソースファイルは、自分で作成する必要があります。テストファイル、ヘッダーファイル(.h)、ソースファイル(.m)をまとめたXcodeプロジェクトファイルを生成する必要があります。もう1つの方法として、このあと説明するテストランナーのユーティリティを使うこともできます。

Xcodeでプロジェクトを作成する

  • Xcodeを起動し、新規プロジェクトを作成します。
  • OS X > Applicationを選び、次にCommand Line Toolを選びます。
  • Nextをクリックし、プロジェクト名にはExerciseNameを使うのがおすすめです。
  • Nextをクリックし、プロジェクトをexercismの演習ディレクトリに保存します。
  • プロジェクトを作成したら、Editor > Add Targetをクリックします。
  • OS X > Testを選び、OS X Unit Testing Bundleを選びます。
  • ターゲットにExerciseName Testsという名前を付けます。
  • 左側のペイン(navigatorと呼ばれます)で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を選びます。
  • これでExerciseName_Testsディレクトリに、ExerciseName.hとExerciseName.mという2つの新しいファイルができます。
  • Project navigatorで自分のプロジェクトをクリックします。
  • ターゲットの一覧でExerciseName Testsをクリックします。
  • エディターのナビゲーションでBuild Phasesを選びます。
  • 2つの.mファイルがどちらもcompile sourcesの一覧に入っていることを確認します。
  • CMD+5でTest navigatorに移動します。
  • ExerciseName Testsという名前のバンドルを右クリックし、Enable ExerciseName_Testsをクリックします。
  • Test navigatorでバンドルにカーソルを合わせると表示される右向きの三角形をクリックするか、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フラグに注目してください。これはxctoolではなくxcodebuildを使うよう指定するものです。xctoolはXcodeの最新リリースでは動作しません。)

objcユーティリティは演習名を使って、テストファイルExerciseNameTest.m、ヘッダーファイルExerciseName.h、ソースファイルExerciseName.mを探します。これらのファイルは一時的なXcodeプロジェクトに挿入され、その後xcodebuildでプロジェクトのテストが実行されます。

objcを使えば、これらの演習を完了するためにXcodeを起動する必要はありませんが、コマンドラインでのエラーメッセージやフィードバックは、Xcodeのユーザーインターフェースほどわかりやすくはありません。