ObjcUnit その2

2003/05/18


ObjcUnitの使い方

もう1年ぶりなので、どうでもいいかもしれないけど(^^;
とりあえず、書いておきましょう。


前提

それでは、ObjcUnitを使って、Test-Driven Developmentしていきます。

Moneyは見飽きていることでしょう。ここでは簡単に

0から9までの表現する整数SmallInteger

を作ることにします。


プロジェクトの作成

  1. プロジェクトの新規作成
    ProjectBuilderを立ち上げて「新規プロジェクト」を作成します。
    Application→Foundation Toolを選びます。
  2. フレームワークの追加
    「External Frameworks and Libraries」にFoundation.frameworkがあります。さらに、ObjcUnit.framework「フレームワークを追加」します。これで、ObjcUnitが使えるようになりました。
  3. 便利クラスを作成
    ObjcUnit.framework/Resources/Documentation/howToSetUpAProjectBuilderProject.htmlに従い、class AllTestsを作成します。前回に従って、クラステンプレートを設定しているのであれば、「新規ファイル」を作成し、「Objective-C TestCase subclass」を選びます。クラステンプレートを設定していないのであれば、「Objective-C class」を選んで修正しましょう。
  4. AllTestsのメソッドsuiteに
    [self addTest:[TestSuite suiteWithClass:[SmallTest class]]];
    
    を追加。
  5. AllTestsと同様にして、class SmallTestを追加

ここまでで、一応プロジェクトは完成。しかし、まだTestCaseだけで肝心のプログラムはまだ何もない。


テストを書こう

Test-Driven Developmentというやつは、肝心のプログラムを書く前にテストのプログラムを書くんです。それじゃ、順を追って書いていきましょう。

  1. まずは、SmallTestにテストメソッドを追加します。
    今回は、「0かどうかを確かめるテスト」にしましょう。
    - (void) testEqualZero
    {
    	SmallInteger* zero = [SmallInteger initWithInt:0];
    	[self assert:zero equals:[SmallInteger initWithInt:0]];
    }
    
    と、0を表すインスタンスを2つ作って比較してみましょう。
  2. ビルドしましょう
    おそらくコンパイラに「SmalIntegerなんて知らん」と言われるはずです。まだ作っていないんだから、あたりまえと言えば、あたりまえ。「まだ何も書いてないのにビルドするなんてアホ!」なんて思っていませんか?
    Test-Driven Developmentというやつは、そういうもんなんです。予定どおりにエラーを出すのも重要なんです。
  3. class SmallIntegerを作成。
    そういうわけで、とりあえず、class SmallIntegerを作成しましょう。さっきと同じ要領で「新規ファイル」を作成し、「Objective-C class」を選んで、class SmallIntegerを作成しましょう。
    ここで、ビルドすると、今度は「メソッドinitWithInt:なんて知らん」と言われることでしょう。これも予想どおりですね(^_^)
  4. メソッドを実装。
    SmallIntegerに、メソッド
    + (id) initWithInt: (int)initValue;
    
    を追加。testEqulZeroで使ったメソッドです。
    ここでは、とにかく実装を書いて動かすことが重要です。
    + (id) initWithInt: (int)initValue
    {
    	SmallInteger *newValue = [[[SmallInteger alloc] init] autorelease];
    	return newValue;
    }
    
    としておきましょう。

ここまできて、やっとビルドできるようになったはずです。めでたし、めでたし。


今日のおまけ

リビルドしたときに、prebind のwarningがうるさかったら、
[ターゲット]→「設定」→「リンカ設定」「最適化」→「プレバインド」のチェックをはずしましょう。

ここまでの状態になったプロジェクトを置きました。参考にしてみてください。


戻る