涼風コンピュータblog

涼風 ・Rubyist, RubyやRuby on Railsに詳しくなっていきたいです

テストフレームワークGHUnitを試してみた

こんにちは。InputだけでなくOuputして、技術を身につけたいと思っている涼風です。

そこで今回はxUnitと呼ばれる単体テストフレームワーク中で、iOSでないかと探しましたら、GHUnitがありました。今回は、こちらの記事をもとにGHUnitを試してみました。

GHUnitで単体テストをしてみよう

★ GHUnitのダウンロード

以下URLから「GHUnitIOS-x.x.xx.zip」をダウンロードします。
https://github.com/gabriel/gh-unit/downloads

2012/11/15現在、最新のGUnitIOS-0.5.6.zipをダウンロードしました。 Mac OS X バージョン10.8.2を使用しました。

SampleTestMain.mないでGHUStackTraceFromException(exception)がコンパイルエラーになったため、[GHTesting descriptionForException:exception]に変更し、#import <GHUnitIOS/GHTesting.h>を追加しました。

SampleTestMain.m

#import <GHUnitIOS/GHUnit.h>
#import <GHUnitIOS/GHTesting.h>

void exceptionHandler(NSException *exception) {
    NSLog(@"%@\n%@", [exception reason], [GHTesting descriptionForException:exception]);
}

int main(int argc, char *argv[]) {
    NSSetUncaughtExceptionHandler(&exceptionHandler);
    
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    int retVal = 0;
    if (getenv("GHUNIT_CLI")) {
        retVal = [GHTestRunner run];
    } else {
        retVal = UIApplicationMain(argc, argv, nil, @"GHUnitIPhoneAppDelegate");
    }
    
    [pool release];
    return retVal;
}

判定するマクロ GHAssertEqualsは以下のような引数を持ちます。
GHAssertEquals(左の値, 右の値, 失敗したときに標準出力に表示する文字列)
左の値と右の値が異なるときに失敗します。

@"test"を@"計算結果に誤りがあります"に変更します。

- (void)testDivideRoundUp
{
    NSInteger num = [Calc divideRoundUp:100 denominator:3];
    GHAssertEquals(num, 33, @"計算結果に誤りがあります");
}

ほかに判定マクロはGHUnitIOS.framework/Headers/GHTestMacros.hにあります。

GHAssertNotNil(オブジェクト, 失敗したときに標準出力に表示する文字列)
オブジェクトがnilのとき失敗します。

GHAssertTrue(評価式, 失敗したときに標準出力に標示する文字列)
評価式がfalseのときに失敗します。

他にもまだマクロはたくさんあります。

UbuntuにPostgreSQL 9.1をインストールする

UbuntuPostgreSQLをインストールする方法を説明します。

OSはUbuntu 12.04 LTS,データベースはPostgreSQLで動作確認しました。

PostgreSQLをインストールする。$はコマンドプロンプトです。$の次から入力してください。

$ apt-get install postgresql

PostgreSQLのバージョンを確認する。

$ psql --version
psql (PostgresSQL) 9.1.3

私が確認した環境ではPostgreSQLのバージョンは9.1.3でした。

PostgreSQLのスーパーユーザーであるpostgresユーザーに変更し、設定ファイルを編集します。

$ sudo su - postgres
$ cd /etc/postgresql/9.1/main/
$ vim ./pg_hba.conf

pg_hba.confファイルから以下の記述までカーソルを移動します。

# "local" is for Unix domain socket connections only
local all all peer

ローカルホストでどんなユーザーでもパスワード認証できるようにします。peerをmd5に変更します。

# "local" is for Unix domain socket connections only
#local all all peer
local all all md5

PostgreSQLを起動します。ただし、インストール後、自動的に起動しますので必要ありません。

/etc/init.d/postgresql start

PostgreSQLを再起動します。

/etc/init.d/postgresql restart

データベースを作成します。

createuser -a blog
createdb -E UTF8 -O blog blog_devlopment -T template0
psql -c "alter user blog with password 'blog'"

※パスワードは説明のために簡単なパスワードを使用していますが、ランダムな長い文字列が良いでしょう。 

blogユーザーでデータベースにログインします。

$ psql -U blog blog_devlopment
blog_deplopment=#

PostgreSQLを停止します。

/etc/init.d/postgresql stop

iPhoneの文字描画位置

iPhoneにおける文字描画位置について解説します。
では画面におなじみの「Hello, world」を描画するサンプルコードを見てみましょう。

サンプルコード 
    UIFont* font=[UIFont systemFontOfSize:24];
    NSString* str=@"Hello, world";
    [str drawAtPoint:CGPointMake(0,0) withFont:font];

画面座標は左上が(0,0),右上が(319,0),左下が(0,479),右下が(319,379)になります。
「Hello, World」が(0,0)に表示されます。これは文字描画 「H」の文字の左上を起点に表示されるためです。
また、Androidでは、文字の底の部分、「g」の下にでいない位置を基準に描画されます。