つぎはテストコードの中身の書き方です。
it のBlocksの中にテストコードを書きます。
[テスト対象のオブジェクト should] マッチャー:期待される値];
という書き方が基本です。
マッチャーはequalなどですが、詳細はこちらを参照してください。
https://github.com/allending/Kiwi/wiki/Expectations
注意する点としては、
Objective-Cではプリミティブな型(intなど)はオブジェクトではないので、
theValue()で囲ってやることによってオブジェクトにしないとだめです。
SPEC_BEGIN(NSDateSpec)
describe (@"NSDate", ^{
context (@"When October", ^{
describe (@"NSDate#lastDate", ^{
context (@"With year:2012", ^{
it (@"should be 30", ^{
// ここにテストコードを書く
NSDate* date = [NSDate dateWithGivenYear:2012 month:10];
[[theValue([date lastDay]) should] equal:theValue(30)];
});
});
});
});
});
SPEC_END
・各テストで共通の前処理、後処理の書き方
以下を必要な階層に入れればよいはずです。
beforeAll(^{ // Occurs once
});
afterAll(^{ // Occurs once
});
beforeEach(^{ // Occurs before each enclosed "it"
variable = [MyClass instance]; });
afterEach(^{ // Occurs after each enclosed "it"
});
・ヘルパーメソッドの書き方
例えばこのような場合青字のところはヘルパーメソッドに置き換えたいといった場合の対応ですが、
SPEC_BEGIN(NSDateSpec)
describe (@"NSDate", ^{
context (@"When October", ^{
describe (@"NSDate#lastDate", ^{
context (@"With year:2012", ^{
it (@"should be 30", ^{
NSDate* date = [NSDate dateWithGivenYear:2012 month:10];
// 何か処理がいろいろ
// ...
[[theValue([date lastDay]) should] equal:theValue(30)];
});
});
context (@"With year:1979", ^{
it (@"should be 30", ^{
NSDate* date = [NSDate dateWithGivenYear:1979 month:10];
// 何か処理がいろいろ
// ...
[[theValue([date lastDay]) should] equal:theValue(30)]; });
});
});
});
});
SPEC_END
これはBlocksを定義して、呼び出せばよいです。
SPEC_BEGIN(NSDateSpec)
describe (@"NSDate", ^{
context (@"When October", ^{
describe (@"NSDate#lastDate", ^{
//Helper Method.
NSNumber* (^helpMethodWithCount)(int) = ^NSNumber* (int count) {
// 何か処理がいろいろ
// ...
};
context (@"With year:2012", ^{
it (@"should be 30", ^{
NSDate* date = dateWithGivenYear:2012 month:10];
helpMethodWithCount(100);
[[theValue([date lastDay]) should] equal:theValue(30)];
});
});
context (@"With year:1979", ^{
it (@"should be 30", ^{
NSDate* date = dateWithGivenYear:1979 month:10];
helpMethodWithCount(10);
[[theValue([date lastDay]) should] equal:theValue(30)];
});
});
});
});
});
SPEC_END
^{}で囲まれているところは、そのまんまBlocksなので、その中に値を定義すれば、Blocksから参照できますので、ヘルパーメソッドに限らず定義できます。