yaakaito.org

Stubbilinoというスタブライブラリがよさげです

Mock, Objective-C, Testing

こんにちは、うきょーです。 Stubbilino というスタブライブラリをみけたのですが、結構良さげです。

1
2
3
4
5
6
7
SEHoge *hoge = [[SEHoge alloc] init];
NSObject<SBStub> *stub = [Stubbilino stubObject:hoge];
[stub stubMethod:@selector(intMethod) withBlock:^ {
    return 10;
}];

NSLog(@"%d", [hoge intMethod]);

みたいにselectorとBlocksを使って書きます。 このBlocksはオブジェクトとか気にせず返せるみたいで、

1
2
3
[stub stubMethod:@selector(stringMethod) withBlock:^(){
    return @"string";
}];

こういうのもいける、超便利。 OCMockとかだとOCValueがどうたらとか出てくるので、非常に楽チンに書ける。 Blocks使ってるので、ちょっと生成がめんどいオブジェクトとかも、押し込んでおけるのでよい。

あとはクラスメソッドのスタブも出来るみたいです。 こっちはまだ使ってないのでREADMEからの引用ですが、

1
2
3
4
5
// https://github.com/robb/Stubbilino/blob/master/README.md
Class<SBClassStub> uiimage = [Stubbilino stubClass:UIImage.class];

[uiimage stubMethod:@selector(imageNamed:)
          withBlock:^(NSString *name) { return myImage; }];

こういう感じで書けるみたいです。 クラスメソッドのスタブは往々にしてだるいという感じだったので、良い。

OCMockなんかはNSProxyを使った実装ですが、こっちはobjc/runtime.h使っています。 なのでちょっとコード追うのはしんどいですが、読んでみるとよいと思います。

 

宣伝:2/23に東京でiOSカンファレンスを開催します!

「conferenceWithDevelopers」というタイトルです。

公式サイト

チケットをゲットはこちらから

無料です!

豪華スピーカーでお送りしますので、みなさん是非ご参加ください!LT発表者も募集してますよ!