スキップしてメイン コンテンツに移動

Objective-CでUnit Test

XCodeにはUnit TestのFrameworkであるSenTestingKitが添付されている。SenTestingKitでのテスト方法を簡単にまとめておく。

以下のようなクラス Circleがあった場合、

#import <Cocoa/Cocoa.h>#define PI (double)3.14159
@interface Circle : NSObject {
double _radius;
}
+(id)circleWithRadius: (double) raidus;
-(id)initWithRadius:(double)radius;
-(double)diameter;
-(double)dimension;
-(double)circumference;
@property(readwrite) double radius;
@end

まず、テスト用の新規ターゲットを作成する。このときアシスタントで「Cocoa」のカテゴリーから「Unit Test Budle」を選択しておく。名前は何でもよい"TestCircle"などとしておく。

次にFrameworkの取り込みを行う。
Frameworkの定義は、/Developer/Libary/Frameworks/SenTestingKit.frameworkにあるのでこれをプロジェクトに追加する。ここで、先に作成した新規ターゲット"TestCircle”に追加する。

そしていよいよテスト用のコードの追加。
新規ファイルをプロジェクトに作成し、ファイルの種類を「Objective-C test case class」を選択する。ヘッダーフィアルを見るとSenTestingKitのヘッダーのインポートとクラスのテンプレートができているので、ここにテストしたいクラスのインスタンスとテスト用のメソッドを定義しておく。

#import <SenTestingKit/SenTestingKit.h>
#import "Circle.h"

@interface CircleTest : SenTestCase {
Circle* circle;
}
-(void)testDiameterValue;
-(void)testCicumference;
-(void)testDimension;
@end

これらのメソッドのほかにSenTestCaseで定義されているsetUpとtearDownの2つのメソッドを通常はオーバーライドする。それぞれ初期化とテスト終了時の後始末を担うメソッド。その他のテスト用のメソッドに関しては、メソッド名を「test」で始めること。

テスト用メソッドでの確認方法は、SenTestingKitが提供するチェック用の関数を使って以下のように実施する。

-(void)testDimension {
STAssertEquals([circle dimension],(30 * 30 * PI),nil,NULL);
}

この関数では最初の引数と2番目の引数が正しくなければエラーとなる。その他いくつかの関数が定義されているのでそれらを使用してクラスのテストケースとその結果をチェックするロジックを作成する。

これらのチェックはビルド時に行われる。チェックするにはアクティブターゲットをテスト用に作成したターゲット(ここではTestCircle)を指定してビルドする。結果が正しければ何事もなくビルドは完了する。エラーがあれば、ビルドの後以下のようにコンパイルのエラーと同様に表示される。

Download

コメント

このブログの人気の投稿

W-ZERO3 カスタマイズ関連

Advanced/W-ZERO3[es]のカスタマイズのメモ。 いろいろインストールしているうちに何をどこから持ってきたのかわからなくなりそうなので、メモを残しておく。 ctrlwapmini テンキー関連の文字入力方式を改善するソフト。 キーマップの作成で携帯電話風の入力方式を利用できたりする。わたしはAuのカシオ系に慣れてしまったので、 w42ca風のキーマップ を拾ってきて利用している。 入手先: http://hp.vector.co.jp/authors/VA004474/wince/wince.html gsgetfile.dll 標準のファイル選択ダイアログを置換するDLL。 My Documents以外のフォルダにアクセスするために作成されたものらしい。いろんなソフトで前提になっているので、とりあえず導入しておく。 入手先: http://www.geocities.co.jp/SiliconValley-Cupertino/2039/ Multi Key Hook 標準では一つしか使えないキーフックを複数のアプリに割当で着るようにするソフト。 入手先をダウンロードし、Windowsフォルダにぶち込んでおく。 入手先: http://geocities.yahoo.co.jp/gl/hou ming 2/view/20070906/1189012118 DefaultMailer advanced/W-ZERO3[es]には、W-ZERO3メールとOutlookメールが入っているが標準MUAをどちらにするか切り替えるソフト。 標準ではOutlookとなっているが実際にはW-ZERO3メールを使うことの方が多いので、todayCompactなどから起動する際、このソフトを利用してW-ZERO3メールが起動するように調整。 入手先: Andante:DefaultMailer version 0.1.0.0リリース KeyLockSuspender 側面のキーロックスイッチの動作をカスタマイズできるソフト。 これでキーロックに連動して、画面のオンオフ、サスペンドなどを強制的に行いバッテリーの不要な消耗を防ぐ。 入手先からダウンロードして適当なフォルダに展開したら、ショートカットを作成してスタートアップに入れておく。 入手先: KeyLockSuspend...

Thinkpad T42

新たに購入したお仕事用のPC Thinkpad T42が先週末届いた。 仕様は、Pentium-M 1.80GHz, 1400x1050の15型TFT液晶、メモリーは追加して1.5GB(増設用に2GBを用意していたが、秘書さんのPCが256MBで苦しんでいたので1GBあげてしまった)、指紋センサー付き。無線もEEE802.11a/b/g対応となった。 こうして、iBookと並べてみると対照的。天使と悪魔か…… 今まで使用してたT30と比較すると、多少CPUが早くなりUSBが2.0になり指紋センサーがついて、やけに軽くなった。腰痛持ちの私にとっては、重量がぐんと軽くなったのが一番うれしいか。それでも2kg以上あるが。 指紋センサーはパームレスト上に(写真でいうと右側)実装されている。付属のソフトで設定すると、起動時のBIOS、HDDのパスワード投入、WindowsXPのログイン用パスワード投入の代わりに、電源オン時の指紋照合一発で済ませることができる。センサーに読み込ませるためには、指を一定の角度でセンサーに向けてまっすぐに動かさないと誤認識される。多少コツが必要で偶に失敗する。指紋はいくつか指を登録できるので複数を登録しておいたほうが無難。 今回も新しいおもちゃになりそうな機能はいくつかついているのだが、2日くらいで飽きてしまった。仕事で使うには十分なスペックで、十分に快適。ちょっと前まではお仕事用のPCも結構愛着やこだわりを持っていたのだが、買い替えを行って新しいPCが来てもあまりワクワクしなくなった。最近は、2年に一度機械的に買い替えを行うような感じ。スペック的に見るとiBookなどと比べるまでもないほどはるかに重装備だが、iBookのほうが楽しい。 PCの価値はスペックだけでは語れないのだよ(ムスカ風)