詳細はこちら。
http://www.kiwi-lib.info/specs.html
RSpecのObjective-C実装といったところで、
やはりRSpecと比べるとかなり機能が少なく最小限のようです。
基本的な書き方は、ほぼRSpecと同じなので、RSpecの本とか読めば参考になりそう。
使い方
テンプレートはこんな感じで、
#import "Kiwi.h"
SPEC_BEGIN(Spec名)
describe {@"テスト対象", ^{
context {@"状態", ^{
describe @"テスト対象メソッド", ^{
context @"与える入力", ^{
it @"期待する出力", ^{
}
}
}
}
}
SPEC_END
実際に書くと
SPEC_END
実際に書くと
SPEC_BEGIN(NSDateSpec)
describe (@"NSDate", ^{
context (@"When October", ^{
describe (@"NSDate#lastDate", ^{
context (@"With xxx", ^{
it (@"should be 30", ^{
describe (@"NSDate", ^{
context (@"When October", ^{
describe (@"NSDate#lastDate", ^{
context (@"With xxx", ^{
it (@"should be 30", ^{
// ここにテストコードを書く
});
});
});
});
});
});
});
});
});
SPEC_END
SPEC_END
ちょっと例が悪かったのでインプットが思いつかなかったのですが、、
こんな風に書けばよいはずです。
あとはインプットや状態によって以下のようにテストを増やしていけばいいのです。
SPEC_BEGIN(NSDateSpec)
describe (@"NSDate", ^{
context (@"When October", ^{
describe (@"NSDate#lastDate", ^{
context (@"With xxx", ^{
it (@"should be 30", ^{
describe (@"NSDate", ^{
context (@"When October", ^{
describe (@"NSDate#lastDate", ^{
context (@"With xxx", ^{
it (@"should be 30", ^{
// ここにテストコードを書く
});
});
});
});
context (@"With xxxxx", ^{
it (@"should be 31", ^{
// ここにテストコードを書く
});
});
});});
});
describe (@"NSDate#firstDate", ^{
it (@"should be 1", ^{
it (@"should be 1", ^{
// ここにテストコードを書く
});
});
});});
});
context (@"When February", ^{
describe (@"NSDate#lastDate", ^{
context (@"With xxx", ^{
it (@"should be 28", ^{
context (@"With xxx", ^{
it (@"should be 28", ^{
// ここにテストコードを書く
});
});
});
});
});
});
SPEC_END
SPEC_END
なにがよいかというと、テストを実行してみるとわかると思いますが、
出力を見てなんのテストが実行されているのかがわかりやすいのがメリットです。
xUnitでもやろうと思ったらできると思いますが、コピペを繰り返すことになるので、
このように階層構造でわけられるので便利だし、見やすいです。