Hatena::Groupiphone-dev

ninjinkunのiPhone開発日記

2009-02-27

iPhoneでユニットテスト

00:05 | はてなブックマーク - iPhoneでユニットテスト - ninjinkunのiPhone開発日記

Objective-Cはサクサク開発を進められて楽しいのですが,キモになるクラスではさすがにテストを書きたくなりますよね.しかしObjective-Cの標準ユニットテストフレームワークであるOCUnit (SenTestingKit.framework)はiPhone実機ではうまく動かないようです.そこでGoogle mac toolboxに入っているiPhone用のユニットテストモジュールを使ってテストを行ってみました.

基本的な使い方は上記のWikiに乗っているので,基本的にはそのまま実行した感じです.ただ,ディレクトリの指定が面倒なので,今回はプロジェクトのディレクトリに"Unit Testing"ディレクトリをごそっとコピーしました.

  • "プロジェクト"メニューから"新規ターゲット"を選択
  • Cocoa TouchのApplicationを選び,適当な名前(Unit Test等)をつける

f:id:ninjinkun:20090227234500p:image

  • 以下のファイルをXCodeのファイルビューにドラッグ,この中の.mファイルを先ほど作ったターゲットに追加.
    • google-toolbox-for-mac/UnitTesting/GTMIPhoneUnitTestMain.m
    • google-toolbox-for-mac/UnitTesting/GTMIPhoneUnitTestDelegate.m
    • google-toolbox-for-mac/UnitTesting/GTMIPhoneUnitTestDelegate.h
    • google-toolbox-for-mac/UnitTesting/GTMSenTestCase.m
    • google-toolbox-for-mac/UnitTesting/GTMSenTestCase.h
    • google-toolbox-for-mac/GTMDefines.h

f:id:ninjinkun:20090227234430p:image

  • "プロジェクト"メニューから"新規ビルドフェーズ"->"新規スクリプトを実行"を選択
  • ウィンドウ内の"スクリプト"の中に"PATH_TO_GTM/UnitTesting/RunIPhoneUnitTest.sh"を書きます.PATH_TO_GTMをGoogle toolboxを置いたディレクトリで置き換える.ごそっとコピーしてる場合は ${SRCROOT}/UnitTesting/RunIPhoneUnitTest.sh"でOKです.

(注!ビルド時にライブラリなどをリンクしている場合は,テスト用ターゲットの設定を実行用ターゲットに合わせる必要があります.RegexKitLiteではまった)

  • ターゲットを先ほど作ったテストに切り替える

f:id:ninjinkun:20090227234618p:image

  • ビルド&実行.とりあえず実行される.

ここまでで準備は終わりです.次はいよいよテストを準備します.

  • "新規ファイル"からObjective-C case classを選択
  • テスト用ターゲットに追加
  • ヘッダの#import <SenTestingKit/SenTestingKit.h>を#import "GTMSenTestCase.h"で置き換える
  • テストしたいクラスをインポートする

このテストはOCUnit互換なので,OCUnitのドキュメントが参考になります.

テスト用関数

-(void)testHogeHoge {
}

という感じで先頭にtestを付けて書きます.アサーションはSTAssertEquals等が用意されています.

STAssertEquals(value1, value2, message);

という感じ.messageにはstringWithFormatのフォーマットが使えます.STAssertEqualsはCの型をチェックする関数のようです.オブジェクトのチェックはSTAssertEqualObjectsで,文字列チェックはSTAssertEqualStringsで行います. STAssertTrue等も便利です.もちろんSetUp関数なども用意されています.

2009-01-27

UITextViewに画像を埋め込む

21:57 | はてなブックマーク - UITextViewに画像を埋め込む - ninjinkunのiPhone開発日記

UITextView内に画像を埋め込んだりする場合(ex. 写真をMail.appで送るときのような感じ) ,

(void) UITextView setContentToHTMLString:(id)fp8

でfp8にHTMLを格納したNSStringを入れれば,そのままHTMLが表示できるので,

これにimgタグをセットして使っています.

セットされたテキストは

(id) UITextView contentAsHTMLString

HTMLとして取り出せるので,再加工も可能.

ただし,このメソッド,Class Dumperで取り出した非公式メソッドなんですよね・・・.

もしかしたらApp Storeでははねられるかもしれないと思って,不安です.