OCUnit iPhoneでテストファースト UnitTestを使う (iPhone cocoa)

こちらをかなり参考にしました↓
OCUnitのTestCase作成 - /var/log/seiji
この日記は、ユニットテストの経験者を対象に書いています。
ユニットテストについては、こちらのページの本がとても参考になります。↓
CppUnitの使い方 - かえるカウンセラーの日記

OCUnitのインストール

http://www.sente.ch/software/ocunit/
↑こちらからOCUnitをダウンロードします。
今回の日記は、OCUnitRoot-v41.dmgをダウンロードして書いています。
ダウンロードしたらインストールが始まります。
今回は標準的な設定でインストールしました。(次へボタン連打)
インストールが終わったら、念のため再起動しましょう。

プロジェクトの作成

まず、普通にiPhoneアプリケーションのプロジェクトを作成します。
Window-Based Applicationで、プロジェクト名はUnitTestJikkenとして作ってみましょう。

UnitTest用のターゲットの作成

「グループとファイル」からターゲットを右クリックします。
「追加」→「新規ターゲット」を選びます。
Mac OS Xの中にあるCoCoaを選択。
Unit Test Bundleを選択し、「次へ」ボタンを押します。
ターゲット名を、UnitTestTargetとし、「完了」ボタンを押します。


すると、「ターゲット "UnitTestTarget"の情報」が開きます。
上にある「ビルド」を選びます。
左上の「表示」のリストボックスから「すべての設定」を選びます。
「▼リンク」→「他のリンカフラグ」を

-framework Foundation -framework SenTestingKit

と変更します。(CocoaをFoundationに変更する)


左上の「表示」のリストボックスから「ユーザ定義設定」を選びます。
GCC_DYNAMIC_NO_PICからGCC_PREFIX_HEADERまでを削除。
(以下のものが残ります。)

GCC_C_LANGUAGE_STANDARD
GCC_WARN_ABOUT_RETURN_TYPE
GCC_WARN_UNUSED_VARIABLE

「ターゲット "UnitTestTarget"の情報」を閉じます。

テストケースの作成

「グループとファイル」からUnitTestJikkenを右クリックします。
「追加」→「新規グループ」で、TestCasesというグループを作りましょう。
TestCasesを右クリックし、「追加」→「新規ファイル」を選びます。
Mac OS XのCocoaを選択し、Objective-C test case classを選択します。
「次へ」ボタンを押します。
ファイル名にHogeTest.mとつけましょう。
「ターゲット」のところで、UnitTestJikkenのチェックを外し、
UniteTestTargetにチェックを入れます。
「完了」ボタンをおします。
そして、HogeTest.mを以下のように編集しましょう。

#import "HogeTest.h"

@implementation HogeTest

- (void)testHoge
{
	STAssertEquals(0, 0, @"引っかからない");
	STAssertEquals(0, 1, @"引っかかる");
}

@end

テストの実行

「グループとファイル」の「ターゲット」→「UnitTestTarget」を右クリック。
「"UnitTestTarget"をビルド」を選択。
すると、エラー一覧に、

Line Location HogeTest.m:17: error: -[HogeTest testHoge]
 : '0' should be equal to '1': 引っかかる

このように表示されます。
見事にユニットテストが実行されました。


なお、「グループとファイル」の「ターゲット」→「UnitTestTarget」をドラッグして、「ターゲット」→「UnitTestJikken」の上にドロップすることが出来ます。
こうすると、UnitTestJikkennを「ビルドして進行」するだけで、ユニットテストが実行され、なにも引っかからなければプログラムが実行されるようになります。

続きを読む

iUnitTest iPhoneでテストファーストを使う (iPhone cocoa)

早速実験してみました。
http://github.com/katsuyoshi/iunittest/tree/master
↑こちらからダウンロードします。
インストールはターミナルから行います。
詳しくはReadMe.txtを参照。


インストールし、新規プロジェクトを選択すると、
UserTemplatesの中に、iUnitTestApplicationが増えています。
さっそくこれでプロジェクトを作成。


そして、新規ファイル追加を選択すると、
UserTemplatesの中に、iUnitTestというのがあり、
IUTTest subclassというのが選べます。


こちらで出来上がったスケルトンを見れば、
ユニットテスト経験者なら、問題なく使えるでしょう。


スケルトンを編集せずそのままビルドして進行を選ぶと、

1 failure

Test1.m:40
-[Test1 test1]
not implemented

とグラフィカルに表示されます。
また、iPhone上で動作するのも、評価が高いです。


問題は、アプリケーションとしてユニットテストが動作していること。
main.mやMainWindow.xibがディレクトリの中に存在してしまっています。
実際に作り上げるアプリケーションのプロジェクトと、同じディレクトリに
置く訳にはいかないので、その辺をどうするかを考える必要があります。


とはいっても、Xcodeは複数プロジェクトを立ち上げられるし、
ソースはプロジェクトファイルとは別の場所にあっても大丈夫なので、
あまり問題はないかもしれません。